找回密码
 用户注册

QQ登录

只需一步,快速开始

楼主: billhu422

求助:Fedora9中安装ACE5.6.8出错。

[复制链接]
 楼主| 发表于 2009-3-26 09:34:46 | 显示全部楼层
楼上的路径手误,打错了。

library的路径设置为:
LD_LIBRARY_PATH=$ACE_ROOT/lib:/usr/lib:/usr/local/lib
发表于 2009-3-26 10:17:07 | 显示全部楼层
查看源代码是解决问题的途径之一。
你不能定义ACE_HAS_AIO_CALLS为0,因为这就是处理异步IO的宏定义。
代码里面,需要这个宏定义。不过我看也就这个,并无其它的定义要求。

所以,我建议,你编译一个最简单的c程序,只调用一次aio_read或者其它出错的api,看看问题在什么地方,以帮助解决问题。
 楼主| 发表于 2009-3-26 13:14:07 | 显示全部楼层

回复 #12 winston 的帖子

我写了一个C程序,用到了aio_read,aio_error,aio_return,编译时需要增加 -lrt 才能编译成功。

我推测需要修改ACE的编译选项。于是,在platform_macros.GNU 的FLAGS_C_CC后面增加了-lrt。然而,重新make时terminal中没有打印出这个选项。错误依旧。

如果需要在编译时添加-lrt选项,在哪添加?
发表于 2009-3-26 17:10:49 | 显示全部楼层
是不是lib文件和路径的问题,我在linux下查到:
/lib/librt.so.1 AIO需要这个库文件支持。
你添加一下路径?
解决方案应该是比较简单了。知道原因了。

我的linux版本是CentOS。
 楼主| 发表于 2009-3-27 17:16:29 | 显示全部楼层

回复 #14 winston 的帖子

Fedora9的librt.so.1也在/lib下


我在LD_LIBRARY_PATH中添加了/lib路径,并且重新 make

错误仍旧存在。

还有哪能添加库文件路径?
发表于 2009-3-27 23:41:08 | 显示全部楼层
几个办法试试。
1、用ACE的另外一个安装编译办法,../configure; make ;这个,不用你现在这个。
2、../configure --help有详细说明,可以加入CXXFLAG等参数指定需要的库。
3、更改MakeFile,加入-lrt指令。

应该就是这些了。
发表于 2009-3-28 13:53:09 | 显示全部楼层
自己重新动手测试了一下,看下面的文件内容:
ACE_wrappers\include\makeinclude\platform_linux.GNU

ifeq ($(threads),1)
  LIBS += -lpthread
  # look for the rt library in the usual places
  LIBS += $(shell test "`ls -L /usr/lib*/librt.so* /lib*/librt.so*`" && echo -lrt)
endif
说明只要下面存在这个库文件,会自己加入link的列表。

我自己是携带最新OPENSSL编译,也发生无法找到lib,解析失败的错误,最后自己更改了MakeFile.am文件,手工添加了库文件,全部通过。
 楼主| 发表于 2009-3-30 09:15:01 | 显示全部楼层

回复 #17 winston 的帖子

这样,我修改了引用了AIO库的工程“Aio_Platform_Test”
的Makefile.am

修改前:
Aio_Platform_Test_CPPFLAGS =\
-I$(ACE_ROOT)\
-I$(ACE_BUILDDIR)\

修改后:
Aio_Platform_Test_CPPFLAGS =\
-I$(ACE_ROOT)\
-I/lib/librt.so.1\
-I$(ACE_BUILDDIR)\
-lrt

是这样改吗?
这样修改后还是报错。
请斑竹说的详细点吧,thanks~
发表于 2009-3-30 11:17:15 | 显示全部楼层
你搞错了。那个配置是路径包含。
## Makefile.Aio_Platform_Test.am

noinst_PROGRAMS += Aio_Platform_Test

Aio_Platform_Test_CPPFLAGS = \
  -I$(ACE_ROOT) \
  -I$(ACE_BUILDDIR)

Aio_Platform_Test_SOURCES = \
  $(ACE_ROOT)/tests/Main.cpp \
  Aio_Platform_Test.cpp

Aio_Platform_Test_LDADD = \
  libTest_Output.la \
  $(ACE_BUILDDIR)/ace/libACE.la

最下面的才是。
 楼主| 发表于 2009-3-31 09:19:18 | 显示全部楼层
为什么修改了Aio_Platform_Test_LDADD 后还是不行。是不是需要重新configure?

之后,我使用了另外的方法:修改build目录下的Makefile文件,在CXXFLAGS后面添加-lrt。

不过这个工作量也太大了,修改了n多个文件!好在全都编译成功了。:lol :lol :lol
感谢斑竹!

请问斑竹,有没有简便点的方法?
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-11-21 21:14 , Processed in 0.018476 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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