找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4959|回复: 1

在linux下无法使用ACE_Dev_Poll_Reactor功能,链接失败

[复制链接]
发表于 2008-9-21 17:12:49 | 显示全部楼层 |阅读模式
这个问题困扰我一个星期。我的平台是RedHat AS4,使用默认的内核安装编译ACE很顺利,但是没有办法使用epoll功能。初步想法是编译新内核,可是2.6的内核编译难度远远超过以往,10几次编译均告启动失败。后来仔细研究了一下为何ACE的脚本,configure在进行测试epoll_create的时候报告错误,把下载回来的config.log打开,把里面的测试代码编成一个cpp文件进行编译,居然报告是因为内核文件版本太低,无法使用!我马上明白了问题所在,问题在于,/usr/include/linux下面的文件都是2.4核心的文件,里面的version.h表明,版本是2.4的,如果使用这套文件进行编译,当然无法使用了。
使用Redhat AS4/usr/src/kernels/下面的新文件,进行一下符号链接:
ln –sf /usr/src/kernels/2.6.9.22_EL.i386/linux /usr/include/linux
ln –sf /usr/src/kernels/2.6.9.22_EL.i386/asm /usr/include/asm
ln –sf /usr/src/kernels/2.6.9.22_EL.i386/scsi /usr/include/scsi
先提前给老的版本改名。
在进行处理后,configure报告错误了,无法进行处理,打开config.log仔细一查,居然是error没有定义,又发现了error.h没有找到。原来还有一个/usr/include/asm/error.h包含了<asm-gerneric/error.h>,而asm-gerneric没有定义,重新定义一个符号链接:
ln –sf /usr/src/kernels/2.6.9.22_EL.i386/asm-gerneric /usr/include/asm-gerneric
这时,configure通过了。可以进行make了。epoll_create创建成功。
问题还没完,这个时候去编译测试程序,测试程序使用了ACE_Dev_Poll_Reactor,结果仍然是失败,总是报告:undefined reference to ACE_Dev_Poll_Reactor。起初以为是无法找到链接库文件,因为按照ACE-install.html,编译的时候使用$ACE_ROOT/build目录,但是如果这样,库文件会放在: /usr/local/lib,总是无法找到。需要修改LD_LIBRARY_PATH,最后,发现如果直接在$ACE_ROOT/ace目录下使用make,库文件会放在正确的位置,但是仍然无法链接成功。
最后想到,Dev_Poll_Reactor这个文件编译需要定义ACE_HAS_EVENT_POLL宏,否则跳过,不编译。于是在config.h里面加入了#define ACE_HAS_EVENT_POLL,重新编译库,再重新编译测试文件,全部成功,运行正常。
发表于 2008-11-9 00:06:15 | 显示全部楼层
晕阿,遇到了同样的问题,我的linux是最新的ubuntu 8.10
在config.h里面加入了#define ACE_HAS_EVENT_POLL,编译ACE失败
后来make clean了一次再编译,来回2遍最后莫名其妙成功了

现在我的gcc版本是4.3.2,编译用ACE的程序的时候老是报很多  ‘xxx’的地址永远不会为 NULL  的警告,比较讨厌
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 07:25 , Processed in 0.014647 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表