最近由于公司用到ACE,所以自己学着用ACE来实现类似于socket网络编程的功能。但当我写服务器端的时候就遇到了大麻烦,由于我是用ACE库导入的,所以不
断的会提示如下错误:
ACE_SERVER error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: int __thiscall SVACE_5_6_0::ACE_Main_Base::run(int,char * * const)" (__imp_?run@ACE_Main_Base@SVACE_5_6_0@@QAEHHQAPAD@Z) ,该符号在函数 _main 中被引用。我用的编译环境是vs2003的,后来我转到vs2010下后编译就可以
通过,但运行的时候端口还是不能绑定。最后问了我的师傅才最后搞定。主要问题ACE中的lib库也是要编译生成的,而编译生成的工具要与你后期开发时的编译工具是
相同版本的,后来自己去网上下了个ACE5.5的,然后自己编译来生成库。下面我主要把ACE如何配置运行来说明一下。当然也借鉴了网上很多知识,而且我这个配置比较
简介,如果还是不能运行,请点击http://www.cnblogs.com/xianqingzh/archive/2011/11/29/2267400.html。
ACE配置运行:
1.下载安装包:http://download.dre.vanderbilt.edu/,只需要下载ACE-5.5.zip即可。
2.下载完后解压路径,我这里是F:\ACE-5.5\ACE_wrappers。
3.设置环境变量(这个必须设置,我这里直接编译运行之后会报无法解析的错误)
用户变量 ACE_ROOT为F:\ACE-5.5\ACE_wrappers,然后再添加Path环境变量,值为%ACE_ROOT%\lib
4.编译ace文件夹中的ace_vc8.sln,然后在lib中就会生成ACEd.lib与ACEd.dll两个库文件
综上你就可以使用ACE库与ace文件夹中的头文件了,我在配置中还是遇到一些错误的。
比如 无法从“int”转换为“ACE_THR_FUNC_RETURN”,我的解决方法是直接删除reinterpret_cast,这个强制转换也许跟版本有关吧。
还有一个是编译正常,但无法运行,最后发现ACE库与ace文件夹不是同一个版本,即ACE库不是这个ace文件夹所编译生成的
到这里我想你应该可与使用你所生成的ACE库来开发程序了,如果还不行,
请点击http://www.cnblogs.com/xianqingzh/archive/2011/11/29/2267400.html