C++ 对libcurl函数的未定义引用

C++ 对libcurl函数的未定义引用,c++,linux,curl,arm,libcurl,C++,Linux,Curl,Arm,Libcurl,我不能编译,我在Odroid-XU4板上使用Ubuntu。我如何解决这个问题?谢谢你的帮助 odroid@odroid:~/Desktop/curl_test.2$ g++ -o postit2 postit2.c -lcurl /tmp/cc4MoKQE.o: In function `main': postit2.c:(.text+0x2c): undefined reference to `curl_mime_init' postit2.c:(.text+0x36): undefined

我不能编译,我在Odroid-XU4板上使用Ubuntu。我如何解决这个问题?谢谢你的帮助

odroid@odroid:~/Desktop/curl_test.2$ g++ -o postit2 postit2.c -lcurl
/tmp/cc4MoKQE.o: In function `main':
postit2.c:(.text+0x2c): undefined reference to `curl_mime_init'
postit2.c:(.text+0x36): undefined reference to `curl_mime_addpart'
postit2.c:(.text+0x48): undefined reference to `curl_mime_name'
postit2.c:(.text+0x56): undefined reference to `curl_mime_filedata'
postit2.c:(.text+0xfa): undefined reference to `curl_mime_free'
collect2: error: ld returned 1 exit status
odroid@odroid:~/Desktop/curl_test.2$ curl --version
curl 7.56.0 (armv7l-unknown-linux-gnueabihf) libcurl/7.47.0 
OpenSSL/1.0.2g zlib/1.2.8 libidn/1.32 librtmp/2.3
Release-Date: 2017-10-04
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps 
pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM 
NTLM_WB SSL libz TLS-SRP UnixSockets 

链接器在其配置的路径中查找libcurl,并首先找到旧版本

编辑
/etc/ld.so.conf
,使链接器在具有新libculr版本的目录中查找

或重新安装libcurl:

sudo apt-get remove libcurl
wget http://curl.haxx.se/download/curl-7.56.0.tar.gz
./configure
make
make install
  • 从源代码处安装最新版本的curl。没有必要删除现有的卷曲。默认配置将把安装放在/usr/local下,但是如果需要,您可以在主目录下安装,并且不需要root权限。
    配置的选项是--prefix=`
  • 默认情况下,编译器和链接器都将在/usr/local中查找。如果你安装到另一个地方,你必须告诉路费在哪里。编译器选项是
    -I/include
    ,链接器选项是
    -L/lib
  • 如果使用动态链接,则必须指定库在运行时的位置。运行时加载程序通常在/usr/local下查找,因此即使在那里安装,也必须指定它。相关的gcc选项是
    -Wl,-rpath=
    。除非您是为另一台计算机编译,否则这是安装libcurl.so的同一目录,因此您可能会使用-L和-Wl,-rpath选项两次指定同一目录

  • 也许您也安装了另一个libcurl版本,g++在链接时会选择它?它只对7.56.0中新增的API调用发出警告…应该怎么做?我需要删除所有版本并尝试安装libcurl 7.56.0?您可以这样做;此外,您还可以安装并构建所需版本的Curl源代码,但不能安装它。然后让您的程序通过在新的Curl构建中指定它们的实际文件系统位置来获取新Curl版本的头文件和静态库。如果您必须从源代码构建新的Curl,那么安装新Curl的问题在于,构建一个缺少SSL支持或其他有用特性的版本非常容易。如果你能从发行版中获得你想要的版本,那不太可能是个问题;但您的发行版可能没有该版本。БчччСчч,您是否尝试了一些变体?不要将软件开发和系统管理混为一谈。开发自己的软件不需要触摸系统安装的软件。您应该。这对于libcurl尤其重要,因为它有无数的构建时配置参数和可选的依赖项。您不希望最终得到一个系统,在这个系统中,curl突然无法执行ssl、ftp或kerberos,或者……我已经考虑过了。在我看来,开发人员应该具备基本的管理技能。它可以减少依赖性,更快地解决问题。