主要介绍将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环境高级编程

http://www.cnblogs.com/hbccdf/p/cplus_for_linux.html

Linux C++ 开发简介(包括Linux守护线程)的更多相关文章

  1. Linux C++ 开发简介

    主要介绍将Windows程序迁移到Linux系统相关知识 简介 Windows程序迁移到Linux系统可能需要修改很多代码, 既需要了解Linux平台的开发知识, 也需要了解Windows平台代码如何 ...

  2. Linux系统的简介及Linux系统的安装

    一.写在前面  本文仅仅对Linux系统进行简要的概述已经对Linux系统的安装进行简要的介绍 二.完成目标 1.Linux操作系统的基本概念 2.Linux系统的安装 三.基本概念 1.什么是操作系 ...

  3. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

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

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

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

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

  6. Linux远程开发

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

  7. 如何参与Linux内核开发(转)

    本文来源于linux内核代码的Document文件夹下的Hoto文件.Chinese translated version of Documentation/HOWTO If you have any ...

  8. 如何参与linux 内核开发

    如果想评论或更新本文的内容,请直接联系原文档的维护者.如果你使用英文 交流有困难的话,也可以向中文版维护者求助.如果本翻译更新不及时或者翻 译存在问题,请联系中文版维护者.   英文版维护者: Gre ...

  9. 使用Visual Studio 2017作为Linux C++开发工具

    Visual Studio 2017 微软的宇宙第一IDE Visual Studio 2017正式版出来了,地址是:https://www.visualstudio.com/vs/whatsnew/ ...

随机推荐

  1. 淘特房产CMS系统 7.5

    资源描写叙述: 淘特房产CMS系统採用淘特AspCms开发,全部前台信息生成静态HTM,提供了楼盘.二手房.房产中介.房产经济人.业主社区等管理模块,集成了淘特CMS与动网论坛,Discuz,Oblo ...

  2. SharePoint 2010 BCS - 简单实例(一)数据源加入

    博客地址 http://blog.csdn.net/foxdave 本篇基于SharePoint 2010 Foundation. 我的数据库中有一个病人信息表Patient,如今我就想把这个表中的数 ...

  3. innerText和innerHTML的区别

    innerhtml用法 innertext用法 以及innerHTML与innertext的区别,看完这个大家以后在实际应用中,就可以选择合适的方法.尽可能的考虑到兼容性. test.innerHTM ...

  4. Swift和OC 混编

    1.首先创建一个Swift工程 2.导入或者创建一个OC文件(.h和.m) 3.再创建一个桥连接文件 4.然后文件样子为 5.在桥接链接里面导入头文件 6.通过targets->->bui ...

  5. JS 获取星期几的四种写法

    今天是星期几的4种JS代码写法,有需要的朋友可以参考一下 第一种写法 复制代码代码如下: var str = "";  var week = new Date().getDay() ...

  6. 深入select_related与prefetch_related函数

    阅读博客http://blog.jobbole.com/74881/的笔记 在数据库有外键的时候,使用select_related()和prefetch_related()可以很好的减少数据库请求的次 ...

  7. C语言之新同学年龄

    新同学年龄 班里来了一名新同学,很喜欢学数学,同学们问他年龄的时候,他说我的年龄平方是个三位数,立方是个四位数,四次方是个六位数.三次方和四次方正好用遍0.1.2.3.4.5.6.7.8.9这10个数 ...

  8. Shell中的正则表达式及字符串处理

    shell里一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.该模式描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所 ...

  9. cocos2d-x游戏开发系列教程-超级玛丽04-AppDelegate

    代码下载链接 http://download.csdn.net/detail/yincheng01/6864893 解压密码:c.itcast.cn 背景 上一篇博文提到在CCApplication: ...

  10. Pagodas(等差数列)

    Pagodas Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...