链接到libresolv时未定义的参考

问题描述:

我有一个项目是一个链接到libresolv的库, 它在最近的发行版上工作正常:Ubuntu 10.x Fedora 13,Mandriva 2010.1但在Centos 5.x上我得到以下安装错误链接到libresolv时未定义的参考

glibc的是:的glibc-2.5-18.el5_1.1

g++ -DHAVE_CONFIG_H -I. -I./include -I/usr/include/postgresql -O3 
-ansi -Wall -Wno-deprecated -D_FORTIFY_SOURCE=0 -MT testUpLog.o -MD 
-MP -MF .deps/testUpLog.Tpo -c -o testUpLog.o testUpLog.cc 
mv -f .deps/testUpLog.Tpo .deps/testUpLog.Po 
/bin/sh ./libtool --tag=CXX --mode=link g++ -O3 -ansi -Wall 
-Wno-deprecated -D_FORTIFY_SOURCE=0 -L/usr/lib64 -L/lib64 
-L/usr/lib64/mysql -o testUpLog testUpLog.o libUpTools.la -lpq 
-lmysqlclient -lssl -lpthread 
libtool: link: g++ -O3 -ansi -Wall -Wno-deprecated -D_FORTIFY_SOURCE=0 
-o .libs/testUpLog testUpLog.o -L/usr/lib64 -L/lib64 
-L/usr/lib64/mysql ./.libs/libUpTools.so -lpq -lmysqlclient -lssl 
-lpthread 
./.libs/libUpTools.so: undefined reference to `__ns_name_uncompress' 
./.libs/libUpTools.so: undefined reference to `__ns_initparse' 
./.libs/libUpTools.so: undefined reference to `__ns_parserr' 
collect2: ld returned 1 exit status 
make[1]: *** [testUpLog] Error 1 
make[1]: Leaving directory `/tmp/UpTools-8.5.3' 
make: *** [check-am] Error 2 

library.la文件包含:

dlname='libUpTools.so.0' 
library_names='libUpTools.so.0.0.0 libUpTools.so.0 libUpTools.so' 
old_library='libUpTools.a' 
inherited_linker_flags='' 
dependency_libs=' -L/usr/lib64 -L/lib64 -L/usr/lib64/mysql -lpq 
-lmysqlclient -lssl -lpthread' 
weak_library_names='' 
current=0 
age=0 
revision=0 
installed=no 
shouldnotlink=no 
dlopen='' 
dlpreopen='' 
libdir='/usr/lib' 

您可以事先在

http://pastebin.com/hs5q21Rq

感谢阅读configure.ac

+0

你的问题到底是什么?你有什么尝试? – ptomato 2010-10-20 17:32:42

+0

ptoato,我的问题是我如何编译libresolv。当然你没有看到任何“-lresolv”。但是,即使在运行./configure时添加LIBS =“$ LIBS -lresolv”,并在最后添加“-lresolv”dependency_libs时会出现这些错误。我的意思是:为什么错误输出,如果我链接到libresolv。我希望我的问题更清楚:)如果你想我可以粘贴我的Makefile.am。 – sebelk 2010-10-21 11:41:10

+0

当你运行configure时,它是否找到库?您可能需要将AC_MSR_ERROR节添加到AC_SEARCH_LIBS的第四个参数,以确保它找到库。 – 2010-10-29 14:27:08

如果libUpTools使用功能的lib libresolv库,你需要这样说:

libUpTools_la_LIBADD = -lresolv(当然-lresolv可更换由变量决定的配置等)

这样,-lresolv将最终在.la文件和.so文件(如果您选择构建它),您可以运行ldd进行验证。