最近做了很多跨平台(主要是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.
4)数据类型的转换
windows平台字符串转换64位整型使用atoi64,但是linux没有类似接口。我们可以使用sscanf("%64I", &result)来转换字符串到64位整型。
3.字符集与字符串处理
linux的api默认使用窄字符,windows的api默认使用宽字符,所以跨平台代码会遇到大量的宽窄字符转换问题。
1)我们可以考虑使