最近做了很多跨平台(主要是linux和windows)C++代码的移植工作,本文做一下总结。跨平台移植技术是由大量的细节构成的,所以下文包含了大量的针尖大小的细节,内容很庞杂。主要遇到以下几个类问题:
1.系统api的移植
windows和linux的api背后的理念是类似的,接口参数略微不一样,但是差别不大,所以完全可以使用一套接口封装。
1)文件查找
windows和linux文件查找api基本类似,可以用一套接口封装。
2)文件io
windows和linux创建、打开、获取文件时间的接口以及读写接口类似,可以用一套接口封装。
3)socket接口也需要做封装。windows和linux的socket接口是类似的,这个封装最容易。
4)系统资源api
创建进程、杀死进程、以及锁、互斥等原子操作。
2.c运行时库
1)printf/spintf的格式
windows定义了一些特殊的格式字符,我们有以下几点需要注意:
windows使用%ws表示宽字符格式,但是跨平台应该使用使用%ls
2)时间函数
windows的时间函数比linux精度高,有不少64位的时间接口。linuxpingtai1截至2019年为止,尚未提供类似接口。
3)字符串处理函数
注意:The functions snprintf() and vsnprintf() write at most size bytes (including the terminating null byte ('\0')) to str.

本文总结了跨平台C++代码移植过程中遇到的主要问题,包括系统API移植、C运行时库、字符集与字符串处理、第三方库选择、数据类型差异以及编译警告处理。针对文件查找、IO、Socket接口、时间函数、字符串转换等方面,提供了详细的解决方案和封装建议。
最低0.47元/天 解锁文章
598

被折叠的 条评论
为什么被折叠?



