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,一个月,基本上现在常规的开发,问题已经不大了,偶尔遇到问题,也基本可以解决.