我有一个基于autotools的库项目,我最近尝试在Ubuntu 13.10上编译。它适用于过去的版本,但现在当它试图链接我的测试工具时,libtool正在将-lcurl更改为/usr/lib/x86_64-linux-gnu/libcurl.so。它为什么这样做?如果我从app_LDADD手动删除$(CURL_LIBS)并替换为-lcurl,则链接正确。
Configure.ac:
PKG_CHECK_MODULES(CURL, libcurl >= 7.20)
测试/ Makefile.am:
check_mylib_LDADD = ../lib/libmylib.la \
$(top_srcdir)/dep/childproj/lib/libchildprj.la $(CURL_LIBS) $(XML_LIBS) \
$(SSL_LIBS)
make的输出。请注意-lcurl如何扩展到.so文件。
/bin/bash ../libtool --tag=CC --mode=link gcc -I/usr/include/libxml2 \
-I../dep/childproj/lib -I./../lib -I../dep/childproj/lib -g -O2 \
-Wall -Werror -o check_mylib check_mylib-seatest.o check_mylib-test.o \
check_mylib-test_mylib.o check_mylib-test_xmlbind.o ../lib/libmylib.la \
../dep/childproj/lib/libchildproj.la -lcurl -lxml2 -lssl -lcrypto
libtool: link: gcc -I/usr/include/libxml2 -I../dep/childproj/lib \
-I./../lib -I../dep/childproj/lib -g -O2 -Wall -Werror -o .libs/check_mylib \
check_mylib-seatest.o check_mylib-test.o check_mylib-test_mylib.o \
check_mylib-test_xmlbind.o ../lib/.libs/libmylib.so \
../dep/childproj/lib/.libs/libchildproj.so \
/usr/lib/x86_64-linux-gnu/libcurl.so -lxml2 -lssl -lcrypto -pthread
../dep/childproj/lib/.libs/libchildproj.so: undefined reference to `curl_easy_perform'
<more undefined reference errors>
答案 0 :(得分:1)
根据错误消息,libchildproj.so
需要与libcurl
相关联。 libchildproj.so
链接如下:
/bin/bash ../libtool --tag=CC --mode=link gcc -g -O2 -Wall -Werror \
-version-info 0:0:0 -o libchildproj.la -rpath /usr/local/lib \
object.lo rest_client.lo -L/usr/lib/x86_64-linux-gnu -lcurl
libtool: link: gcc -shared -fPIC -DPIC .libs/object.o .libs/rest_client.o \
-L/usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/libchildproj.so -O2 \
-pthread -Wl,-soname -Wl,libchildproj.so.0 -o .libs/libchildproj.so.0.0.0
所以在实际的链接步骤(最后一个)-lcurl
不存在,并且没有链接到
libchildproj.so
。将$(CURL_LIBS)
添加到libchildproj_la_LDADD
可修复链接错误。