主要介绍将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. Elasticsearch 5.0 中term 查询和match 查询的认识

    Elasticsearch 5.0 关于term query和match query的认识 一.基本情况 前言:term query和match query牵扯的东西比较多,例如分词器.mapping ...

  2. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  3. Tomcat shutdown执行后无法退出进程问题排查及解决

    问题定位及排查 上周无意中调试程序在Linux上ps -ef|grep tomcat发现有许多tomcat的进程,当时因为没有影响系统运行就没当回事.而且我内心总觉得这可能是tomcat像nginx一 ...

  4. 看完SQL Server 2014 Q/A答疑集锦:想不升级都难!

    看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术 ...

  5. 如何避免git每次提交都输入密码

    在ubuntu系统中,如何避免git每次提交都输入用户名和密码?操作步聚如下:1: cd 回车: 进入当前用户目录下:2: vim .git-credentials (如果没有安装vim 用其它编辑器 ...

  6. AJAX 大全

    本章内容: 简介 伪 AJAX 原生 AJAX XmlHttpRequest 的属性.方法.跨浏览器支持 jQuery AJAX 常用方法 跨域 AJAX JsonP CORS 简单请求.复制请求.请 ...

  7. Android Studio —— 创建Menu菜单项

    大多数android程序的右上角都会设置一个菜单按钮比如微信的界面右上角的加号. 这个需要在layout同级目录下新建文件夹命名为menu,再右击新建的menu新建xml文件:

  8. GSD_WeiXin(高仿微信)应用源码

    高仿微信计划:已经实现功能 1.微信首页(cell侧滑编辑.下拉眼睛动画.下拉拍短视频.点击进入聊天详情界面) 2.通讯录(联系人字母排序.搜索界面) 3.发现(朋友圈) 4.我(界面) 待实现功能( ...

  9. ORACLE从共享池删除指定SQL的执行计划

    Oracle 11g在DBMS_SHARED_POOL包中引入了一个名为PURGE的新存储过程,用于从对象库缓存中刷新特定对象,例如游标,包,序列,触发器等.也就是说可以删除.清理特定SQL的执行计划 ...

  10. Kafka1 利用虚拟机搭建自己的Kafka集群

    前言:       上周末自己学习了一下Kafka,参考网上的文章,学习过程中还是比较顺利的,遇到的一些问题最终也都解决了,现在将学习的过程记录与此,供以后自己查阅,如果能帮助到其他人,自然是更好的. ...