ACE和TAO编译时支持Unicode字符集和Qt

本文介绍如何通过修改编译参数使ACE和TAO支持Unicode字符集和Qt,并解决wchar_t类型兼容性问题。

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

ACE和TAO编译时支持Unicode字符集和Qt


一、概述

前面提到的“简单编译方法”,利用了ACE的默认配置,没有做修改,实际使用时,可能需要修改后再编译,否则和项目的其他库可能存在冲突,尤其是Unicode字符集的问题和wchar_t的处理问题。

二、问题

  1. Unicode字符集的问题,项目中的其他库、或者和其他语言一起开发调用时,统一为Unicode字符集是很有必要的。按照“简单编译”的方法,是不支持Unicode字符集的。如下图所示:

    现在需要把选中项改为“使用Unicode”字符集。一个简单的办法是直接在VC的项目设置中修改,但是这个方法不好。既然MPC可以用来生成sln,必然可以配置项目信息。所以换个方法是很有必要的。

  2. wchar_t 的问题,wchar_t 是个奇葩的东东,貌似其他平台没有这个玩意,比如移动设备上。VS2008默认建立项目时,是把wchar_t作为内置类型,其他版本的VC也差不多。一般来说,默认选择不会对项目产生什么影响,但是一旦项目中有其他库一起编译链接时,就会产生问题,比如Qt。而Qt 默认是不把wchar_t作为内置类型的,把wchar_t当作了unsigned short,如果不修改ACE的这个选项,那么编译链接就会出问题。

三、目标

直接通过 mpc 的生成命令行的方式,支持Unicode字符集Qt不把wchar_t作为内置类型。而不是通过修改MPC生成的VC工程项目属性。实现对tao_ace(在ACE_ROOT/tao下)工程的转换,支持VS2008打开并编译。

四、支持Qt

  1. 下载并安装Qt,这里安装的是 Qt 4.7,且安装在C:\QtSDK中,细节这里不展开了。
  2. 建立系统环境变量QT_DIR,内容如下:
    QTDIR=C:\QtSDK\Desktop\Qt\4.7.4\msvc2008\
  3. 建立系统环境变量QT_CFG,内容如下:
    QT_CFG=4
    ACE或者TAO中的一些程序链接Qt库时,需要这个变量来确定Qt库的版本,如QtCore4.lib等,否则就会链接QtCore.lib这样的库文件。

五、生成sln项目文件

参考“简单编译”的方法,完成前面的几个步骤,最后在命令行中,运行如下脚本:

	mwc.pl -value_template TreatWChar_tAsBuiltInType=0 -type vc9 ../tao/tao_ace.mwc -features uses_wchar=1 -features qt4=1

六、参数说明:

  1. -value_template TreatWChar_tAsBuiltInType=0, 目的是把wchar_t不作为内置类型。
  2. -features uses_wchar=1, 采用Unicode字符集编码。
  3. -features qt4=1, 支持Qt。

七、小结

  1. 运行后,就生成了tao_ace.sln工程文件,用VS2008就可以打开并编译了。我的练习中,Debug和Release编译通过,全部成功!
  2. 命令行中的参数,可以参考ACE-INSTALL.html 文档中,关于Installation prerequisites一块的内容。
  3. 像参数 TreatWChar_tAsBuiltInType 需要从MPC的文档中去查看,按文档中的说明,一些feature参数,需要从mpb文件中查找。
  4. 其他工程,比如ACE.mwc,采用类似的方式,只需稍加修改目录即可编译。
  5. 另外,通过在config.h文件中增加 ACE_USES_WCHAR 和 ACE_HAS_WCHAR 的方法,这里不做讨论了。
  6. 如果不需要边界对齐,在config.h文件中,可以增加如下两行定义,这样传输的效率更高些。
    #define	ACE_CDR_IGNORE_ALIGNMENT
    #define	ACE_LACKS_CDR_ALIGNMENT
    

    这两行必须放在最前面。

欢迎自由转载!:)

2013年11月23日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值