make[2]: *** [libevent.la] 错误 1

Posted

技术标签:

【中文标题】make[2]: *** [libevent.la] 错误 1【英文标题】:make[2]: *** [libevent.la] Error 1 【发布时间】:2016-06-22 10:16:18 【问题描述】:

我正在尝试在 Centos 上安装 libevent-2.0.12-stable,但是当我输入 sudo make 时,发生错误(我在 make 之前输入了 ./configure):

/bin/sh ./libtool --tag=CC   --mode=link gcc  -g -O2 -Wall -fno-strict-aliasing -pthread -version-info 6:1:1 -release 2.0   -o libevent.la -rpath /usr/local/libevent-2.0.12-stable/lib event.lo evthread.lo buffer.lo bufferevent.lo bufferevent_sock.lo bufferevent_filter.lo bufferevent_pair.lo listener.lo bufferevent_ratelim.lo evmap.lo log.lo evutil.lo evutil_rand.lo strlcpy.lo select.lo poll.lo   epoll.lo  signal.lo event_tagging.lo http.lo evdns.lo evrpc.lo  -lrt 
libtool: link: gcc -shared  -fPIC -DPIC  .libs/event.o .libs/evthread.o .libs/buffer.o .libs/bufferevent.o .libs/bufferevent_sock.o .libs/bufferevent_filter.o .libs/bufferevent_pair.o .libs/listener.o .libs/bufferevent_ratelim.o .libs/evmap.o .libs/log.o .libs/evutil.o .libs/evutil_rand.o .libs/strlcpy.o .libs/select.o .libs/poll.o .libs/epoll.o .libs/signal.o .libs/event_tagging.o .libs/http.o .libs/evdns.o .libs/evrpc.o   -lrt  -O2 -pthread   -pthread -Wl,-soname -Wl,libevent-2.0.so.5 -o .libs/libevent-2.0.so.5.1.1
/usr/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/librt.a(clock_gettime.o): relocation R_X86_64_PC32 against undefined symbol `__errno_location@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: ld returned 1 exit status
make[2]: *** [libevent.la] Error 1
make[2]: Leaving directory `/home/lpchou/software/httpsqs/libevent-2.0.12-stable'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/lpchou/software/httpsqs/libevent-2.0.12-stable'
make: *** [all] Error 2

有人可以帮忙吗?谢谢。

更新

在我使用@KnudLarsen 提到的rpm 包成功安装libevent 后,我尝试使用make 安装tokyocabinet,但是发生了同样的错误:

/usr/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/libm.a(s_sin.o): relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/libm.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [libtokyocabinet.so.9.10.0] Error 1

我尝试了Recompiling with -fPIC 中的方法,但不起作用。似乎缺少一些依赖包,因为我只是在另一台centos机器上安装了libevent和tokyocabinet,一切正常。

【问题讨论】:

?那会是哪个版本的 CentOS? cat etc/redhat-release .... (CentOS 6.x 的 libevent 版本为 1.4.13。) .. CentOS 6 的 libevent-2.0.13-14.2.x86_64.rpm 可在 Internet 上找到:rpm.pbone.net 您是否阅读并理解recompile with -fPIC这部分内容? @KnudLarsen 版本是 6.2,我安装了 libevent-2.0.13-14.2.x86_64.rpm 没问题,但是当我安装 tokyocabinet 时遇到同样的问题 @tripleee 我确实注意到使用 -fPIC 重新编译。但是由于我是初学者,我不知道这是什么意思,我该怎么办?试试“sudo make -fPIC”? 关于 libm.a :你应该有(编译的 -fPIC)/usr/lib64/libm.so ...来自 glibc-devel :即# yum install gcc-c++ 将为您提供 gcc 充分工作所需的一切。 【参考方案1】:

CentOS 6.8 - 64 位:

tokyocabinet-1.4.32 构建正常:libtokyocabinet.so.8.23.0、libtokyocabinet.a

tokyocabinet-1.4.48 也可以:libtokyocabinet.so.9.11.0, libtokyocabinet.a

...所以我猜你必须安装/重新安装 gcc 的构建要求:

yum reinstall gcc-c++ glibc-devel glibc-headers kernel-headers

...拥有正确的文件 /usr/lib64/ 和 /usr/include/。

?您要构建哪个版本的 tokyocabinet?你从哪里得到的?



【讨论】:

版本是 1.4.47,在我重新安装 gcc-c++ glibc-devel glibc-headers kernel-headers 并尝试重新安装 tokyocabinet 后,出现同样的错误。估计不是版本问题。 输入'ls -l'时,/usr/lib64/中有libm.so,但它是'../../lib64/libm.so.6'的链接,有关系吗? @chou。是的,就是这样:/usr/lib64/libm.so -> ../../lib64/libm.so.6 是的,这里../../lib64/libm.so.6是/lib64/libm.so.6

以上是关于make[2]: *** [libevent.la] 错误 1的主要内容,如果未能解决你的问题,请参考以下文章

使用 make 命令时出现错误“make: [Makefile:2: all] Error 127”

linux make问题

make和make install的区别

Linux操作系统自动化编译make和Makefile

ubuntu安装 make4.2

Linux项目自动化构建工具make与makefile