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 ...
随机推荐
- 如何一步一步用DDD设计一个电商网站(三)—— 初涉核心域
一.前言 结合我们本次系列的第一篇博文中提到的上下文映射图(传送门:如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念),得知我们这个电商网站的核心域就是销售子域.因为电子商务是以信息网络 ...
- .NET Core全新路线图
.NET Core / ASP.NET Core 1 RTM发布两周后,社区也很积极,收到了非常多的反馈,上周五微软的scott Hunter 在dotnet团队官方博客上发布了.NET Core全新 ...
- 07.LoT.UI 前后台通用框架分解系列之——强大的文本编辑器
LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
- JavaWeb——Listener
一.基本概念 JavaWeb里面的listener是通过观察者设计模式进行实现的.对于观察者模式,这里不做过多介绍,大概讲一下什么意思. 观察者模式又叫发布订阅模式或者监听器模式.在该模式中有两个角色 ...
- python 数据类型---文件二
1.打印进度条 import sys,time for i in range(20): sys.stdout.write("#") sys.stdout.flush() #不等缓冲 ...
- python中IndentationError: expected an indented block错误的解决方法
IndentationError: expected an indented block 翻译为IndentationError:预期的缩进块 解决方法:有冒号的下一行要缩进,该缩进就缩进
- AndroidStudio — Error:Failed to resolve: junit:junit:4.12错误解决
原博客:http://blog.csdn.net/u013443865/article/details/50243193 最近使用AndroidStudio出现以下问题: 解决:打开app下的buil ...
- 如何获取url中的参数并传递给iframe中的报表
在使用报表软件时,用户系统左边一般有目录树,点击报表节点就会在右侧网页的iframe中显示出报表,同时点击的时候也会传递一些参数给网页,比如时间和用户信息等.如何使网页中的报表能够获取到传递过来的参数 ...
- 一个无限加载瀑布流jquery实现
实现大概是下面的效果,写了比较详细的注释 <!DOCTYPE html><html> <head> <meta charset="UTF-8&quo ...