Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ubuntu libtool更改-链接期间将lcurl更改为libcurl.so_Ubuntu_Autotools_Libtool - Fatal编程技术网

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

Ubuntu libtool更改-链接期间将lcurl更改为libcurl.so,ubuntu,autotools,libtool,Ubuntu,Autotools,Libtool,我最近尝试在Ubuntu 13.10上编译一个基于autotools的库项目。它在以前的版本中工作,但现在当它尝试链接我的测试工具时,libtool正在将-lcurl更改为/usr/lib/x86_64-linux-gnu/libcurl.so。为什么要这样做?如果我从app_LDADD中手动删除$(CURL_LIBS)并替换为-lcurl,它将正确链接 Configure.ac: PKG_CHECK_MODULES(CURL, libcurl >= 7.20) tests/Makefi

我最近尝试在Ubuntu 13.10上编译一个基于autotools的库项目。它在以前的版本中工作,但现在当它尝试链接我的测试工具时,libtool正在将-lcurl更改为/usr/lib/x86_64-linux-gnu/libcurl.so。为什么要这样做?如果我从app_LDADD中手动删除$(CURL_LIBS)并替换为-lcurl,它将正确链接

Configure.ac:

PKG_CHECK_MODULES(CURL, libcurl >= 7.20)
tests/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>
/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\
检查mylib-seatest.o检查mylib-test.o检查mylib-test\u mylib.o\
检查_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:对“curl\u easy\u perform”的未定义引用

根据错误消息,
libchildproj。因此
需要链接到
libcurl
<代码>libchildproj。因此链接如下:

/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\u LIBS)
添加到
libchildproj\u la\u LDADD
修复了链接错误。

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\u client.lo-L/usr/lib/x86\u 64-linux-gnu-lcurl libtool:link:gcc-shared-fPIC-DPIC.libs/object.o.libs/rest\u client.o-L/usr/lib/x86\u 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
-lcurl
似乎是从第二个输出行剥离出来的,因此没有与之链接。好的,你说得对。我仔细检查了一下,发现我的libchildproj_LDADD缺少$(CURL_LIBS)。我加了这个,它就起作用了。请作为答案张贴!