【问题标题】:libtool changes -lcurl to libcurl.so during linklibtool 在链接期间将 -lcurl 更改为 libcurl.so
【发布时间】: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)。我添加了它并且它有效。请张贴作为答案!

标签: ubuntu autotools libtool


【解决方案1】:

根据错误信息,libchildproj.so 需要链接到libcurllibchildproj.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 修复了链接错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多