在RHEL6.1(Red Hat Enterprise Linux Server)上静态编译并不容易。tcprstat编译也有这个问题。
源码下载:tcprstat@Launchpad 命令:bzr branch lp:tcprstat
编译命令:./bootstrap && ./configure && make
如果顺利的话,就结束了。不过在我的发行版会报如下错误:
gcc -Wall -Werror -g -pthread -I../libpcap/libpcap-1.1.1/ -g -O2 -static -L../libpcap/libpcap-1.1.1/ \
-o tcprstat-static tcprstat_static-tcprstat.o tcprstat_static-functions.o tcprstat_static-capture.o \
tcprstat_static-process-packet.o tcprstat_static-local-addresses.o tcprstat_static-stats.o \
tcprstat_static-output.o tcprstat_static-stats-hash.o -lpthread -lpcap -L/usr/lib64/
ld: cannot find -lpthread
collect2: ld returned 1 exit status
-o tcprstat-static tcprstat_static-tcprstat.o tcprstat_static-functions.o tcprstat_static-capture.o \
tcprstat_static-process-packet.o tcprstat_static-local-addresses.o tcprstat_static-stats.o \
tcprstat_static-output.o tcprstat_static-stats-hash.o -lpthread -lpcap -L/usr/lib64/
ld: cannot find -lpthread
collect2: ld returned 1 exit status
经张新铭同学指点,发现在尝试静态编译时(-static),找不到pthread的链接库。pthread在Linux的glibc库中实现(NPTL),所以需要静态编译链接,则需要对应的glibc静态链接库。
查询这台机器对应的glibc版本为glibc-2.12-1.25.el6.x86_64(rpm -qa|grep glibc),那么也需要对应版本的静态链接库,在网上搜索对应的rpm包,并安装:
glibc-static-2.12-1.25.el6.x86_64.rpm
rpm -ivh glibc-static-2.12-1.25.el6.x86_64.rpm
rpm -ivh glibc-static-2.12-1.25.el6.x86_64.rpm
问题解决。编译好的文件再src目录下:tcprstat tcprstat-static
在RHEL上静态链接库缺失导致编译失败的问题很常见,故记录之。
Leave a Reply