libtool在链接期间将-lcurl更改为libcurl.so

时间:2014-01-22 17:23:15

标签: ubuntu autotools libtool

我有一个基于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>

1 个答案:

答案 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可修复链接错误。