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 ...
随机推荐
- Be Better:遇见更好的自己-2016年记
其实并不能找到好的词语来形容过去的一年,感觉就如此平淡的过了!没有了毕业的稚气,看事情淡了,少了一丝浮躁,多了一分认真.2016也许就是那句话-多读书,多看报,少吃零食多睡觉,而我更愿意说--Be B ...
- nginx配置反向代理或跳转出现400问题处理记录
午休完上班后,同事说测试站点访问接口出现400 Bad Request Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...
- TODO:macOS上ThinkPHP5和Semantic-UI集成
TODO:macOS上ThinkPHP5和Semantic-UI集成 1. 全局安装 (on OSX via homebrew)Composer 是 homebrew-php 项目的一部分 2. 把X ...
- 探索ASP.NET MVC5系列之~~~1.基础篇---必须知道的小技能
其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程 汇总:http://www.cnblogs.com/dunitian/p/4822808.html#mvc 本章D ...
- JavaScript 对象属性介绍
本篇主要介绍JS中对象的属性,包括:属性的分类.访问方式.检测属性.遍历属性以及属性特性等内容. 目录 1. 介绍:描述属性的命名方式.查找路径以及分类 2. 属性的访问方式:介绍'.'访问方式.'[ ...
- SQL Server-聚焦计算列持久化(二十一)
前言 上一节我们结束了Hash Match Aggregate和Stream Aggregate的讲解,本系列我们来讲讲关于SQL Server中的计算列问题,简短的内容,深入的理解,Always t ...
- Android N开发 你需要知道的一切
title: Android N开发 你需要知道的一切 tags: Android N,Android7.0,Android --- 转载请注明出处:http://www.cnblogs.com/yi ...
- shiro权限管理框架与springmvc整合
shiro是apache下的一个项目,和spring security类似,用于用户权限的管理‘ 但从易用性和学习成本上考虑,shiro更具优势,同时shiro支持和很多接口集成 用户及权限管理是众多 ...
- 【JS基础】正则表达式
正则表达式的() [] {}有不同的意思. () 是为了提取匹配的字符串.表达式中有几个()就有几个相应的匹配字符串. (\s*)表示连续空格的字符串. []是定义匹配的字符范围.比如 [a-zA-Z ...
- 总结30个CSS3选择器
或许大家平时总是在用的选择器都是:#id .class 以及标签选择器.可是这些还远远不够,为了在开发中更加得心应手,本文总结了30个CSS3选择器,希望对大家有所帮助. 1 *:通用选择器 ;; ...