Linux C++ 开发简介
主要介绍将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++ 开发简介的更多相关文章
- Linux C++ 开发简介(包括Linux守护线程)
阅读目录 简介 操作系统 编辑器 编译器 构建系统 调试 IDE 可执行程序.动态库.静态库 服务 Windows服务简介 创建Windows服务 注册Windows服务 管理Windows服务 Li ...
- 使用vs2019进行Linux远程开发
通常,当我们开发Linux程序时有两种方案: 在Linux上直接编写程序并进行运行测试和调试 在Windows或Mac OS X上借助工具进行远程开发 虽然我自己是在Linux环境上直接进行开发的,但 ...
- Linux远程开发
Linux远程开发 通常,当我们开发Linux程序时有两种方案: 在Linux上直接编写程序并进行运行测试和调试 在Windows或Mac OS X上借助工具进行远程开发 虽然我自己是在Linux环境 ...
- Linux企业级开发技术(1)——epoll企业级开发之简介
Epoll是当前在 Linux 下开发大规模并发网络程序的热门人选, Epoll 在 Linux2.6 内核中正式引入.和 select 相似,是高效 I/O 多路复用技术. 其实在 Linux 下设 ...
- GStreamer 简化 Linux 多媒体开发
Streamer 是 GNOME 桌面环境下用来构建流媒体应用的开源多媒体框架(framework),其目标是要简化音/视频应用程序的开发,目前已经能够被用来处理像 MP3.Ogg.MPEG1.MPE ...
- 新一代 Linux 文件系统 btrfs 简介
https://www.ibm.com/developerworks/cn/linux/l-cn-btrfs/ Btrfs 简介 文件系统似乎是内核中比较稳定的部分,多年来,人们一直使用 ext2/3 ...
- Linux系统入门简介<1>
linux系统入门简介 我们为什么要学习Linux? 在介绍Linux的历史前,我想先针对大家如何对Linux的发音说一下.我发现我身边的朋友对Linux的发音大致有这么几种: "里那克斯& ...
- 一文搞懂Linux系统开发
先列一下Linux系统开发要掌握的知识,以后有时间再一一介绍. 欢迎关注我的微信公众号:fensnote 文章目录 Linux系统开发会用到什么? C语言基础 shell脚本 学会使用Makefile ...
- 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识
驱动开发读书笔记. 0.06 嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...
随机推荐
- VM(虚拟机安装win7 提示 :units specified don't exist, SHSUCDX can't install)解决方法
改成IDE的模式
- ASP.NET MVC5+EF6+EasyUI 后台管理系统 (源码购买说明)
系列目录 升级日志 !!!重大版本更新:于2016-12-20日完成了系统的结构重构并合并简化了T4(这是一次重要的更新,不需要修改现有功能的代码),代码总行数比上个版本又少了1/3.更新了代码生成器 ...
- 阿里云服务器上配置并使用: PHP + Redis + Mysql 从配置到使用
(原创出处为本博客,http://www.cnblogs.com/linguanh/) 目录: 一,下载 二,解压 三,配置与启动 四,测试 Redis 五,配置 phpRedis 扩展 六,综合测试 ...
- 【Machine Learning】Python开发工具:Anaconda+Sublime
Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...
- 程序猿都没对象,JS竟然有对象?
现在做项目基本是套用框架,不论是网上的前端还是后端框架,也会寻找一些封装好的插件拿来即用,但还是希望拿来时最好自己过后再回过头了解里面的原理,学习里面优秀的东西,不论代码封装性,还是小到命名. 好吧, ...
- angluarjs2项目生成内容合并到asp.net mvc4项目中一起发布
应用场景 angular2(下文中标注位NG2)项目和.net mvc项目分别开发,前期采用跨域访问进行并行开发,后期只需要将NG2项目的生产版本合并到.net项目. NG2项目概述 ng2项目采用的 ...
- javascript函数
array.sort(function(a, b){ return a -b ; } ) 把数组 array 按照从小到大排序. [11, 22, 586, 10, -58, 86].sort(f ...
- 使用DeviceOne实现微信小程序功能
微信小程序即将推出,还没推出就火的不行了.基于微信这个巨大平台,小程序必然能有巨大成功.不过它并不能完全取代App,该开发App还得开发.如果我们自己想实现一个基于自己的APP包含类似微信的小程序功能 ...
- background例子
- Quartz2D总结
天了噜,脑子完全懵了,最起码说出来个上下文啊,连这个都给忘了,特此总结一下,并以此缅怀这次面试 Quartz2D的API来自于Core Graphics(这就是为什么CGContextRef是以CG开 ...