linux下 opendiameter的编译

来源:互联网 发布:内网动态域名解析 知乎 编辑:程序博客网 时间:2024/06/06 01:18

远没有在windows下来的那么容易。。。。后来才意识到windows下的ACE5.8实际上很多模块都没有更新,和opendiameter(两年多前的项目)正好能匹配,当然也需要一定的修改,只是多少可以容忍。linux下的ACE5.8, mutex模块作了较大的修改,(这些修改似乎没有集成到windows版本上),而整个opendiameter项目对工具版本的依赖实在太重,如果想使用ACE5.8的linux版本,可能需要对opendiameter作很大的修改。(开源项目在模块整合上有很多类似的需要解决的问题)

但是换用ACE5.5.10,在debian 下依然编译不过,有些模块使用C++标准io库,有些模块又不使用,在更新了gnu工具的debian系统上configure的时候总是得出不使用iostream的结论(这个问题在后期的版本中解决了)。尝试了一下5.5.8版本,依然有这个问题。(http://www.freesoftwaremagazine.com/community_posts/my_opendiameter_experience_part_i_build_and_installation 上有一篇文章说是使用5.5版本的经过小的修改就可以编译通过,其他5.5.x的以及更高版本,要么ACE自身编译不过,要么后面的open diameter编译不过)。尝试使用选项--enable-stdcpplib,似乎并不是很起作用;编译的时候总是报cout,cin等不在当前名字空间内...这个问题本身很好解决,只要加入#include <iostream> using namespace std;即可,但是出现这个错误的文件很多,一个一个的修改实属下策...后来跟踪了一下configure的过程,原来configure生成的config.h文件是放在$(BUILD_DIR)/ace下的,而不是$(ACE_ROOT)/ace下,之前一直在找config.h,还曾经把$(ACE_ROOT)/ace/config.h.in文件改为config.h,结果编译产生了一大堆的问题。(编译的时候config.h会先在$ACE_ROOT/ace目录下找,其实ACE_ROOT的定义不应该定义为源码的目录,这个时候才体会到这个问题)。找到了真正被使用的config.h,那么上面那个关于iostream的问题就容易解决了,只要把里面的#define ACE_LACKS_IOSTREAM_TOTALLY 1改为 #undef ACE_LACKS_IOSTREAM_TOTALLY即可!!(可怜我为了这个问题,ACE编了多了版本,有花了好几个小时重新安装了最新的GNU工具...). 另外还会出现一个SSL问题的问题,就是configure的结果中没有把-lssl -lcrypto放入makefile里面,由于对configure的过程实在不熟系,所以就直接改makefile乐。

折腾了好几天终于编好了ACE5.5.10/8, 开始编译opendiameter-1.0.7-i又在configure的出了问题,一时恼怒就没有仔细想就直接在所有需要修改的makefile里增加了-lssl -lcrypto -lpthread,编译中还出现了关于库的依赖问题(很显然opendiameter依赖于ACE5.5.x x<8).

 

原创粉丝点击