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 ...
随机推荐
- Git Bash的一些命令和配置
查看git版本号: git --version 如果是第一次使用Git,你需要设置署名和邮箱: $ git config --global user.name "用户名" $ gi ...
- div实现自适应高度的textarea,实现angular双向绑定
相信不少同学模拟过腾讯的QQ做一个聊天应用,至少我是其中一个. 过程中我遇到的一个问题就是QQ输入框,自适应高度,最高高度为3row. 如果你也像我一样打算使用textarea,那么很抱歉,你一开始就 ...
- Matlab 绘制三维立体图(以地质异常体为例)
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
- [C#] C# 知识回顾 - 学会使用异常
学会使用异常 在 C# 中,程序中在运行时出现的错误,会不断在程序中进行传播,这种机制称为“异常”. 异常通常由错误的代码引发,并由能够更正错误的代码进行 catch. 异常可由 .NET 的 CLR ...
- Gradle 实现 Android 多渠道定制化打包
Gradle 实现 Android 多渠道定制化打包 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在项目中遇到需要实现 Apk 多渠道.定制化打包, Google .百度查找了一些资料, ...
- 菜鸟Python学习笔记第二天:关于Python黑客。
2016年1月5日 星期四 天气:还好 一直不知道自己为什么要去学Python,其实Python能做到的Java都可以做到,Python有的有点Java也有,而且Java还是必修课,可是就是不愿意去学 ...
- 用Kotlin创建第一个Android项目(KAD 01)
原文标题:Create your first Android project using Kotlin (KAD 01) 作者:Antonio Leiva 时间:Nov 21, 2016 原文链接:h ...
- iOS之UILabel的自动换行
思路: 获取UILabel的frame大小 获取UILabel的字体大小 获取UILabel的文本内容 根据上面的3部分数据,计算文本显示区域大小 根据4计算的大小,实时改变UILabel的frame ...
- 安装并使用PHPunit
安装并使用PHPunit Linux 下安装PHPunit PHP 档案包 (PHAR) 要获取 PHPUnit,最简单的方法是下载 PHPUnit 的 PHP 档案包 (PHAR),它将 PHPU ...
- 类型转换器(InitBinder 初始化绑定器)
单日期格式 导入jar包 创建FirstController.java @Controller public class FirstController { /** * @param binder * ...