如何使DFC实现跨平台

DFC的下一个版本就是要兼容WINDOWS,因此牵扯到跨平台的问题,下面将即时记录在WINDOWS的编译过程中遇到的问题。

问题1:工具问题

目前DFC已采用cmake进行编译,因此,在linux下采用cmake直接编译生成可执行文件,在windows下采用cmake-2.8.10.2-win32-x86 + VS2008的方式进行开发。

问题2:编码格式问题

由于微软字符个性的编码格式以及VS平台不能设置字符编码,导致原本在linux下采用UTF-8编码的源代码如包含中文即会导致编译告警甚至错误。当前采用折中的办法,即修改源代码中的各种中文为英文版本。

问题3:如何识别操作系统问题

网上众说纷纭,比较保险的办法是采用宏定义,在源代码中遇到需根据平台不同对待的情况时,即加上类似如下的代码:

#ifdef WINDOWS
    #include <windows.h>
#else
    #include <unistd.h>
#endif

然后在windows平台下编译时,需在cmake的配置文件CMakeLists.txt中加上 -DWINDOWS 这样一个编译开关。

PS:在后面的实践中,我发现VS2008在编译时会附带一个WIN32的宏定义,因此就不用再画蛇添脚了~

问题4:局部变量声明问题

linux下,在函数内部的任意一个地方,随时可以声明局部变量,但VS会固执的要求所有的变量都在函数一开始的时候全部声明完毕。虽然不太方便,但却不失为一个好习惯。

问题5:函数问题

有些非标准C函数是不能通用的,比如通信函数等,这就需要根据不同平台进行区别对待。下面列举下在DFC向windows ‘跨’的时候遇到的不通用函数:

  1. fcntl VS ioctlsocket
gettimeofday VS GetLocalTime access VS _access close VS _close 其他...

问题6:链接库问题

报错error LNK2019: 无法解析的外部符号 _ ioctlsocket@12 ……

需在源文件的include语句后增加

#ifdef WINDOWS
    #pragma comment(lib,"ws2_32.lib")
#endif

 问题n:待续...

曙光得见:
    在cmd中进入编译完成后的路径中,输入dfc.exe -v,即显示当前编译器及各模块的版本~

转载于:https://my.oschina.net/bbdlg/blog/111947

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值