【发布时间】:2014-01-22 17:23:14
【问题描述】:
我最近尝试在 Ubuntu 13.10 上编译一个基于自动工具的库项目。它适用于过去的版本,但现在当它尝试链接我的测试工具时,libtool 正在将 -lcurl 更改为 /usr/lib/x86_64-linux-gnu/libcurl.so。为什么要这样做?如果我从 app_LDADD 中手动删除 $(CURL_LIBS) 并替换为 -lcurl,它会正确链接。
配置.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>
【问题讨论】:
-
libchildproj.so是如何关联的?这似乎没有与-lcurl相关联,但根据错误应该是。 -
是的,它与-lcurl链接:/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:链接: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_LDADD 缺少 $(CURL_LIBS)。我添加了它并且它有效。请张贴作为答案!