主要介绍将Windows程序迁移到Linux系统相关知识

简介

Windows程序迁移到Linux系统可能需要修改很多代码,
既需要了解Linux平台的开发知识,
也需要了解Windows平台代码如何迁移到Linux平台,
下面分享一下我所掌握的相关开发经验,
如果有不对的地方,请立即指出。

操作系统

Linux操作系统都是使用Linux内核,比较常见的Linux发行版有 CentOS、RedHat、Debain、openSUSE等。
主流linux发行版的概述+比较+推荐

编辑器

  • Vim
  • Emacs
  • gedit
  • Atom
  • Visual Studio Code
  • ...

编译器

  • GCC
  • Clang

构建系统

  • make
  • CMake
  • qmake
  • automake
  • ...

调试

  • gdb
  • lldb
  • ...

IDE

  • Eclipse
  • CodeBlocks
  • Clion

可执行程序、动态库、静态库

类型 Windows Linux
执行程序 .exe 具有执行权限的文件,可以无扩展名
动态库 .dll .so
静态库 .lib .a
批处理 .bat/.cmd Shell脚本,一般为.sh

服务

Windows服务是Windows下特有的一种服务模型,一个Windows服务程序不能直接运行在Linux上,需要对这个Windows服务进行一些修改才能运行到Linux上。

Windows服务简介

Windows服务的运行需要一个Windows服务以及一个服务管理程序。

创建Windows服务

构建一个Windows服务可能有几种方式,比较常见的有,直接使用Windows服务API,另外一种方式,使用VS的服务模板,生成一个服务程序,而这个程序使用atl框架,而这个ATL框架实际就是对Windows服务API的封装。

通过VS创建一个Windows服务程序看一个参考创建Windows服务。

注册Windows服务

创建了Windows服务后,在运行服务前,需要先向系统注册一下。
通过VS生成的服务,注册比较简单,详情可以参考注册Windows服务。

管理Windows服务

可以通过Windows服务管理器services.msc,net命令、sc命令管理Windows服务,详情可以参考命令行管理Windows服务

Linux守护进程简介

Linux服务,又称为守护进程,或则daemons,与Windows服务类似,也需要一个服务程序以及一个管理程序。

创建Linux守护进程

创建守护进程程序要比创建Windows服务程序简单很多,详情可以参考守护进程详解及创建。

管理Linux守护进程

跨平台服务框架——Boost.Application

Boost.Application是一个开源的C++库,主要用于构建跨平台的服务,包括Windows、Unix、Linux、MaxOS等。没错,这个库可以用来做跨平台的服务。Boost.Application 使用开源协议 Boost Software License, Version 1.0。

使用Boost.Application可以很方便的编写跨平台的服务代码,具体请参考使用Boost.Application快速构建Windows服务

日期和时间

boost::posix_time
数据库自己封装了一个date_time

多线程

Windows Linux 跨平台
CreateThread pthread库 std::thread
GetCurrentThreadId pthread库 std::this_thread::get_id
Sleep usleep std::this_thread_sleep_for(std::chrono::second(1))

同步

Windows Linux 跨平台
CRITICAL_SECTION pthread库 std::mutex
递归锁 pthread库 std::recursive_mutex
读写锁 pthread库 boost::shared_mutex
CreateMutex pthread库 boost::interprocess::named_mutex
InterlockedCompareExchange pthread库 std::atomic
CreateEvent(not named) pthread库 std::condition_variable
CreateEvent(named) System V signal boost::interprocess::named_condition

文件和目录

boost::filesystem

IO

Windows Linux 跨平台
Create/Open/Read/WriteFile create/open/read/write 标准C(fopen)/标准C++(fstream/filebuf)

IPC

Windows Linux 跨平台
CreateFileMapping/MapViewOfFile/FlushOfView mmap boost::interprocess库

SEH

Windows Linux 跨平台
__try/__except signal 自定义跨平台宏

dump

Windows Linux 跨平台
MiniDump - -

VisualGDB

VisualGDB是一个VS插件,通过此插件,可以实现VS编辑、编译、调试Linux程序。

开发Linux程序

Using Visual Studio to develop Linux apps

支持CMake

Creating CMake Linux projects with Visual Studio

调试

10 Powerful Debugging Tricks with Visual Studio

附加调试

Attaching to remote Linux applications with VisualGDB

分析崩溃转储

Debugging Linux Core Dumps with VisualGDB

从Windows迁移到Linux

Porting a Windows App to Linux with Visual Studio

学习资料

  • 鸟哥的Linux私房菜 基础学习篇
  • Linux C编程一站式学习
  • UNIX环境高级编程

Linux C++ 开发简介的更多相关文章

  1. Linux C++ 开发简介(包括Linux守护线程)

    阅读目录 简介 操作系统 编辑器 编译器 构建系统 调试 IDE 可执行程序.动态库.静态库 服务 Windows服务简介 创建Windows服务 注册Windows服务 管理Windows服务 Li ...

  2. 使用vs2019进行Linux远程开发

    通常,当我们开发Linux程序时有两种方案: 在Linux上直接编写程序并进行运行测试和调试 在Windows或Mac OS X上借助工具进行远程开发 虽然我自己是在Linux环境上直接进行开发的,但 ...

  3. Linux远程开发

    Linux远程开发 通常,当我们开发Linux程序时有两种方案: 在Linux上直接编写程序并进行运行测试和调试 在Windows或Mac OS X上借助工具进行远程开发 虽然我自己是在Linux环境 ...

  4. Linux企业级开发技术(1)——epoll企业级开发之简介

    Epoll是当前在 Linux 下开发大规模并发网络程序的热门人选, Epoll 在 Linux2.6 内核中正式引入.和 select 相似,是高效 I/O 多路复用技术. 其实在 Linux 下设 ...

  5. GStreamer 简化 Linux 多媒体开发

    Streamer 是 GNOME 桌面环境下用来构建流媒体应用的开源多媒体框架(framework),其目标是要简化音/视频应用程序的开发,目前已经能够被用来处理像 MP3.Ogg.MPEG1.MPE ...

  6. 新一代 Linux 文件系统 btrfs 简介

    https://www.ibm.com/developerworks/cn/linux/l-cn-btrfs/ Btrfs 简介 文件系统似乎是内核中比较稳定的部分,多年来,人们一直使用 ext2/3 ...

  7. Linux系统入门简介<1>

    linux系统入门简介 我们为什么要学习Linux? 在介绍Linux的历史前,我想先针对大家如何对Linux的发音说一下.我发现我身边的朋友对Linux的发音大致有这么几种: "里那克斯& ...

  8. 一文搞懂Linux系统开发

    先列一下Linux系统开发要掌握的知识,以后有时间再一一介绍. 欢迎关注我的微信公众号:fensnote 文章目录 Linux系统开发会用到什么? C语言基础 shell脚本 学会使用Makefile ...

  9. 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识

    驱动开发读书笔记. 0.06  嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...

随机推荐

  1. 透过WinDBG的视角看String

    摘要 : 最近在博客园里面看到有人在讨论 C# String的一些特性. 大部分情况下是从CODING的角度来讨论String. 本人觉得非常好奇, 在运行时态, String是如何与这些特性联系上的 ...

  2. Unity 序列化

    Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http://docs ...

  3. 来吧,HTML5之基础标签(下)

    <dialog> 标签 定义对话框或窗口. <dialog> 标签是 HTML 5 的新标签.目前只有 Chrome 和 Safari 6 支持 <dialog>  ...

  4. Android如何制作漂亮的自适布局的键盘

    最近做了个自定义键盘,但面对不同分辨率的机型其中数字键盘不能根据界面大小自已铺满,但又不能每种机型都做一套吧,所以要做成自适应,那这里主讲思路. 这里最上面的titlebar高度固定,下面输入的金额高 ...

  5. java设计模式之--单例模式

    前言:最近看完<java多线程编程核心技术>一书后,对第六章的单例模式和多线程这章颇有兴趣,我知道我看完书还是记不住多少的,写篇博客记录自己所学的只是还是很有必要的,学习贵在坚持. 单例模 ...

  6. “RazorEngine.Templating.TemplateParsingException”类型的异常在 RazorEngine.NET4.0.dll 中发生,但未在用户代码中进行处理 其他信息: Expected model identifier.

    这个问题是由于在cshtml中 引用了model这个单词  它可能和Model在解析时有冲突. 解决方法:把model换成别的单词就可以了.

  7. JAVA回调机制解析

    一.回调机制概述     回调机制在JAVA代码中一直遇到,但之前不懂其原理,几乎都是绕着走.俗话说做不愿意做的事情叫做突破,故诞生了该文章,算是新年的新气象,新突破!     回调机制是什么?其实回 ...

  8. 【算法】(查找你附近的人) GeoHash核心原理解析及代码实现

    本文地址 原文地址 分享提纲: 0. 引子 1. 感性认识GeoHash 2. GeoHash算法的步骤 3. GeoHash Base32编码长度与精度 4. GeoHash算法 5. 使用注意点( ...

  9. BPM配置故事之案例4-子表

    公司渐渐对采购管理重视起来了,新招聘了采购主管老李,老李对现有的申请表很不满意,要求将申请物资和申请原因改成物资明细表 物资明细表 小明只好继续致电大毛-- 大毛:把申请物资和申请原因删掉,新增一个数 ...

  10. 敏捷转型历程 - Sprint3 Grooming

    我: Tech Leader 团队:团队成员分布在两个城市,我所在的城市包括我有4个成员,另外一个城市包括SM有7个成员.另外由于我们的BA离职了,我暂代IT 的PO 职位.PM和我在一个城市,但他不 ...