Chinaunix首页 | 论坛 | 博客
  • 博客访问: 106851
  • 博文数量: 21
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 241
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-10 10:51
个人简介

命有已作,相有心生,祸福无门,惟人自召

文章分类

全部博文(21)

文章存档

2013年(21)

我的朋友

分类: LINUX

2013-05-10 11:05:25

在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!!!


===========================================
===========================================
久坐不利于健康哦!适时起来活动活动吧~  
阅读(7687) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~