windows程序员开发linux程序的头一个月
开发环境选择
vim,vscode,qt,visual studio都可以做linux c++开发,但是作为windows程序员,最熟悉的还是visual stuio,加上visual studio 2019 支持cmake及linu开发,所以最终选择了visual studio 2019 + cmake作为开发环境.同时使用虚拟机中的ubuntu作为编译机.学习cmake基本用法
学习设置包含路径;
学习设置库搜索路径;
学习设置动态库静态库的导入;选择boost作为基础库
有许多常用算法的实现,省下不少造轮子的时间.
可以将很多操作系统相关细节透明化,实现跨平台开发.学习一个linux发行版基本用法
选择了最容易入手的ubuntu,有界面操作,也可以使用命令行,还有进程监视器.选择一个文件传输工具
FinalShell,不经可以通过ui传输文件,还可以通过ui的方式操作文件.编码
算法实现上到是没什么区别,但是一些细节还是需要注意的:- 路径格式,windows是正斜杠('/')反斜杠('')都ok,linux必须是正斜杠('/').经常使用boost::filesystem库会减少很多麻烦.
- windows下wchar_t是2个字节,linux下是三个字节,所以代码不能写的太死,内存分配是经常使用sizeof就可以了.
- 本机字符windows下是ansi,linux是utf-8,即平时使用的api参数是char*时,windows必须传ansi字符串,而linux必须传入utf-8字符串.
- 尽量不要使用UINT DWORD这些visual c++的数据类型,旧代码改造留下的如果修改很麻烦,就只能用个头文件typedefine一下这些类型了.
- linux不支持代码导入库,即不能使用 #pragma comment(lib,"xxx")这种方法通过代码自动导入库,只能通过cmake代码导入.
- windows的dll搜索路径默认包含当前路径,linux并没有,不会搜索当前路径,可以通过修改LD_LIBRARY_PATH环境变量来添加索索路径.
- gcc编译器很多时候比msvc的编译器更加严格,相同的代码,windows下编译通过,linux下编译反而报错.
- linux下一切皆文件,包括socket,进程等,这点和windows的句柄有点不一样.如果需要在进程间传递句柄,则需要使用linux特有的与套接字,这点在windows下反而更方便,一个windows api就可以实现跨进程句柄拷贝了.
- linux下网络使用epoll,windows使用iocp,不过有boost的asio,直接封装好了.
现状
一个多月过去了,现在程序已经可以跑在windows和linux上了,visual studio 2019帮了很大的忙,试想如果从vim开始写linux,估计会把人逼疯.而通过vs,一个月,基本上现在常规的开发,问题已经不大了,偶尔遇到问题,也基本可以解决.
windows程序员开发linux程序的头一个月的更多相关文章
- WSL2:在Windows系统中开发Linux程序的又一神器
作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...
- gcc和MinGW的异同(在cygwin/gcc做的东西可以无缝的用在linux下,没有任何问题,是在windows下开发linux程序的一个很好的选择)
cygwin/gcc和MinGW都是gcc在windows下的编译环境,但是它们有什么区别,在实际工作中如何选择这两种编译器. cygwin/gcc完全可以和在linux下的gcc化做等号,这个可以从 ...
- 程序员藏经阁 Linux兵书
程序员藏经阁 Linux兵书 刘丽霞 杨宇 编 ISBN 978-7-121-21992-4 2014年1月出版 定价:79.00元 536页 16开 内容提要 <Linux兵书>由浅 ...
- 调皮的程序员:Linux之父雕刻在Linux内核中的故事
本文内容由公众号“格友”原创分享. 1.引言 (不羁的大神,连竖中指都这么帅) 因为LINUX操作系统的流行,Linus 已经成为地球人都知道的名人.虽然大家可能都听过钱钟书先生的名言:“假如你吃 ...
- Web程序员开发App系列 - 调试Android和IOS手机代码(补图)
Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...
- Web程序员开发App系列 - 申请苹果开发者账号
Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...
- Web程序员开发App系列 - 认识HBuilder
Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...
- .Net程序员学习Linux(一)
本次知识点:Linux系统的多终端切换,linux下的用户,linux远程访问工具使用,linux下重要的目录,命令的组成,通配符,linux的路径问题,文件操作的综合运用 为什么学习linux? 1 ...
- Net程序员学习Linux
Net程序员学习Linux 本次知识点:Linux系统的多终端切换,linux下的用户,linux远程访问工具使用,linux下重要的目录,命令的组成,通配符,linux的路径问题,文件操作的综合运用 ...
随机推荐
- CentOS 6 修改/etc/security/limits.conf不生效办法
我们使用CentOS系统,在部署新的服务经常会遇到 打开最大文件数限制 too many open files的警告,通常我们只需要修改/etc/security/limits.conf该文件,增加两 ...
- OpenStack Train版-13.安装块存储服务cinder(控制节点)
Cinder的核心功能是对卷的管理,允许对卷.卷的类型.卷的快照.卷备份进行处理.它为后端不同的存储设备提供给了统一的接口,不同的块设备服务厂商在Cinder中实现其驱动,可以被Openstack整合 ...
- MySQL 语句及其种类
DDL(Data Definition Language) DDL(Data Definition Language),数据定义语言 CREATE:创建数据库和表等对象 DROP:删除数据库和表等对象 ...
- 【python接口自动化】- PyMySQL数据连接
什么是 PyMySQL? PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,Python2中则使用mysqldb.它是一个遵循 Python数据库APIv2.0规范, ...
- Gym - 101981D Country Meow(模拟退火)题解
题意: 给\(n\)个三维点,问最小覆盖球的半径. 思路: 模拟退火. 代码: #include<set> #include<map> #include<cmath> ...
- ysoserial Commons Collections3反序列化研究
0x00 前言 在ysoserial中,官方是没给gadget,这儿经过文章分析我认为的gadget,继承自AbstractTranslate的类被Javassist插桩后返回一个被修改过的templ ...
- 高并发之Semaphore、Exchanger、LockSupport
本系列研究总结高并发下的几种同步锁的使用以及之间的区别,分别是:ReentrantLock.CountDownLatch.CyclicBarrier.Phaser.ReadWriteLock.Stam ...
- Windows 10 & git & bash
Windows 10 & git & bash If you are on Windows, we recommend downloading Git for Windows and ...
- CDN 工作原理剖析
CDN 工作原理剖析 CDN / Content Delivery Network / 内容分发网络 https://www.cloudflare.com/zh-cn/learning/cdn/wha ...
- how to publish a dart package using Github Actions?
how to publish a dart package using Github Actions? dart package flutter package Github Actions publ ...