主要介绍将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. C++设计模式之状态模式(四)

    4.状态模式总结 状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象能够让环境对象拥有不同的行为.而状态转换的细节对于client而言是透明的.client不直接操作 ...

  2. JavaSE学习总结第22天_IO流4

    -  22.01  数据输入输出流的概述和讲解 操作基本数据类型 public class DataInputStreamextends FilterInputStream implements Da ...

  3. 杭电ACM 2052 Picture

    Picture Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  4. BZOJ 3175: [Tjoi2013]攻击装置( 匈牙利 )

    黑白染成二分图, 然后不能同时选的就连边, 最大匹配数为m, t为不能放的数目, 则题目所求最大点独立集为 n*n-m-t -------------------------------------- ...

  5. webviewactivity

    WebView注意点,注释里有说明 package com.example.suneyaenews; import com.example.http.HttpThread; import androi ...

  6. 初识 python

    Python 语言介绍 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python变化 python 2 和 python 3 1.1/2 等于0.5 2.print ...

  7. What is Webhook ( Introduction to Webhook )

    A webhook in web development is a method of augmenting or altering the behavior of a web page, or we ...

  8. HLS 协议

    HTML 5 视频直播一站式扫盲   本文来自于腾讯bugly开发者社区,原文地址:http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=1 ...

  9. 转: sublime text 2 前端编码神器-快捷键与使用技巧介绍

    代码编辑器或者文本编辑器,对于程序员来说,就像剑与战士一样,谁都想拥有一把可以随心驾驭且锋利无比的宝剑,而每一位程序员,同样会去追求最适合自己的强大.灵活的编辑器,相信你和我一样,都不会例外. 如果说 ...

  10. Vijos P1680距离

    题目 背景 简单的DP 描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb_c_”,“_a_bcbcd_”和“ab ...