ICE3.1.1 开发中遇到的问题(四)

到目前为止,Ice的最新版本是3.4.1。

不过Ice3.1.1是Zeroc发布的最后一个支持windows2000的官方版本。为了兼容windows2000,我不得不把我的程序分成2个版本,一个用vs2008+ice3.4进行编译。

一个用vc6.0+3.1.1进行编译。

中间遇到不少问题,归纳如下。

1、在使用Ice3.1.1 源码版本时,需要先对Ice3.1.1进行编译。

    编译方法: 用vc6打开源码下面的all.dsw, 打开tools->option->Directories.设置Ice的 include目录,lib目录,bin目录

       编译all的时候include目录不能够包含2003 psdk的路径,否则会报很多错误,如果你实在需要使用2003psdk,那么最好先删除psdk的include路径,等编译完成之后再加进来。

 

2、程序编译

 Ice编译完成之后,对自己写的代码编译,如果自己的代码用到了2003psdk的话,这时候把sdk的include路径包含进来,另外不要忘记stlport的include路径。如果编译出现错误

C:\ICE-3.1.1-THIRDPARTY-VC60\INCLUDE\STLPORT\stl/_threads.h(181) : error C2733: second C linkage of overloaded function 'InterlockedIncrement' not allowed
        C:\ICE-3.1.1-THIRDPARTY-VC60\INCLUDE\STLPORT\stl/_threads.h(181) : see declaration of 'InterlockedIncrement'

则需要打开C:\Ice-3.1.1-ThirdParty-VC60\include\stlport\stl_user_config.h

 将这2个开关打开

/*
 * You should define this macro if compiling with MFC - STLport <stl/_config.h>
 * then include <afx.h> instead of <windows.h> to get synchronisation primitives
 *
 */

 # define _STLP_USE_MFC 1 //不用mfc的可以不管这个


// boris : this setting is here as we cannot detect precense of new Platform SDK automatically
// If you are using new PSDK with VC++ 6.0 or lower, please define this to get correct prototypes for InterlockedXXX functions
# define _STLP_NEW_PLATFORM_SDK 1

 

另外还有一些常见错误的编译选项目,比如Project->Setting->link里面library modules:Ice.lib IceUtil.lib

Project Options  /GR /MDd

Project->Setting->C/C++里面的Project Options:_WIN32_WINNT=0X500

 

另外我还遇到一个问题,debug版本没有任何问题,但是用release版本一运行就出错。

后来发现是我在release版本里面用了/MDd参数进行编译, 在release版本中应该使用/MD

看来当初出现问题的时候没有了解这个参数具体的意思,现在才终于整明白了。

 

你可能感兴趣的:(ICE)