linux porting 总结(未完待续)

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做了很多跨平台(主要是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)我们可以考虑使

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值