在64位ubuntu 12.10下安装apache,需要先安装apr但遇到这个故障。搞了两个半天才解决。参见下文
错误如下:
/usr/bin/ld: /usr/lib64/libuuid.a(gen_uuid.o): relocation
R_X86_64_32 against `.rodata.str1.1' can not be used when making a
shared object; recompile with -fPIC
/usr/lib64/libuuid.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
make[1]: *** [libapr-1.la] 错误 1
make[1]:正在离开目录 `/home/fernando/OneMS/OneMS-TR-Install/depends/apr-1.4.5'
make: *** [all-recursive] 错误 1
两种解决方法:
方法一:这种方法并非真正的解决方案,存在问题,若加上了--disable-shared参数会导致后续安装apache时错误(无法生成so文件,但我不敢确定是这个参数导致的)
PIC就是position independent
code,它的作用是代码共享,如果不加-fPIC,则加载.so文件的代码段时,代码段引用的数据对象需要重定位,
重定位会修改代码段的内容,这就造成每个使用这个.so文件代码段的进程在内核里都会生成这个.so文件代码段的copy.
在安装mysql和unbound容易出现这样的错误,解决方法在configure加如下参数--disable-shared --with-pic或者--enable-shared,在这里设置CFLAGS没有用
下面是解决方法的原blog
http://www.cppblog.com/zhangyq/archive/2010/11/30/135091.aspx
步骤:
root@Nodin-OptiPlex-330:/home/fernando/apr-1.4.5# ./configure --disable-shared -with-pic
root@Nodin-OptiPlex-330:/home/fernando/apr-1.4.5# make
root@Nodin-OptiPlex-330:/home/fernando/apr-1.4.5# make install
方法二:这种方法是读了下面的文章,确实不错,又结合了错误中的提示想到的解决办法
先尝试了加上fPIC参数,无论是CFLAGS=-fPIC还是CXXFLAGS=-fPIC都尝试了,错误依旧。
但看到这篇文章的case4后,又仔细看了错误提示,发现“recompile with -fPIC /usr/lib64/libuuid.a”这句话,是不是libuuid.a有问题呢?
执行了apt-cache search uuid后,根据输出的列表安装包。发现第二个包系统中就没有uuid-dev
于是执行apt-get install uuid-dev,中间还有个软件冲突,先不管是干什么的,卸载之 apt-get remove e2fsprogs-devel
安装uuid-dev成功后,再次安装apr,问题解决。yeah!!!
===========================================
===========================================
久坐不利于健康哦!适时起来活动活动吧~
阅读(7790) | 评论(0) | 转发(0) |