【问题标题】:ld cannot find library curl when running make file运行make文件时ld找不到库curl
【发布时间】:2018-10-20 02:27:39
【问题描述】:

使用提供给我的预构建 make 文件进行编译时,遇到以下错误:

/bin/ld: cannot find -lcurl
collect2: error: ld returned 1 exit status
make[1]: *** [dis.exe] Error 1
make[1]: Leaving directory 'intg_builds/Test2'

据我了解,链接器在链接时未能找到 curl 文件。在搜索文件系统后,我在 /usr/bin/ 中找到了 curl,并在 /bin/ 中找到了指向它的符号链接。 curl甚至和ld在同一个目录。

这是链接到 curl 的 make 文件中的代码:

EXTRALIBS= /usr/local/lib/libxerces-c.a -lcurl 

操作系统是 Centos 7 64 位。

Curl 是版本 7.29.0 (x86_64-redhat-linux-gnu) libcur/7.29.0 NSS/3.28.4 zlib/1.2.7 libidn/1.28 libssh2/1.4.3

Xerces-c 是 3.1.1 版

我应该在哪里有一个 curl 的符号链接,以便链接器正确找到它?

请注意:不鼓励我此时更改 make 文件。如果我们可以复制制作此 make 文件的环境,这对我的目的会更好。

更多信息: 在 /usr/lib64/ 中有 2 个 libcurl.so 文件。一个是“libcurl.so.4”,另一个是“libcurl.so.4.3.0”

更新: 在建议安装 libcurl-devel 后,错误已经改变。现在我在同一个包中收到数百个未定义的参考错误。示例如下:

/home/~/Downloads/git/Foo/Build_Tools/HLA/trunk/xerces-c/xerces-c-3.1.1/src/./sercesc/util/RefHashTableOf.c:415: undefined reference to 'operator delete(void*, unsigned long)'
/usr/local/lib/libxerces-c.a(IGXMLScanner2.o):/home/~/Downloads/git/Foo/Build_Tools/HLA/trunk/xerces-c/xerces-c-3.1.1/src/./xercesc/util/RefHashTableOf.c:223: more undefined references to 'operator delete(void*, unsigned long)' follow

它们似乎引用了 delete 或 uset_<Bar>_50,它们看起来像属性或全局变量、转码器函数和变量等。几乎感觉像是在尝试连接到错误的库。

【问题讨论】:

    标签: curl makefile linker centos7 ld


    【解决方案1】:

    /bin/ld: 找不到-lcurl

    -lcurl 表示“libcurl.so”,而您只有运行时库 libcurl.so.4 -> libcurl.so.4.3.0

    # yum install libcurl-devel :提供用于构建应用程序的文件curl

    /usr/bin/curl-config, /usr/include/curl/{headers.h}, /usr/lib64/libcurl.so, /usr/lib64/pkgconfig/libcurl.pc

    【讨论】:

    • 那么你是说 libcurl.so.4 和 libcurl.so.4.3.0 都不是正确的库吗?如果是这样,谢谢。我会在上班的时候尝试一下,如果可以,我会接受这个,如果可能的话,修改问题的标题,以便其他人更容易找到。
    • 抱歉现在出现双重评论,但这并没有解决问题。相反,现在我得到了对 curl 中各种函数的未定义引用。我会用一些例子来更新我的问题。
    • 您的代码可能存在一些限制。建议:1。使用 CentOS6 的二进制版本。 2。上传代码(dropbox、GoogleDrive)→ 显示 shared 链接,我将尝试创建一个 rpm,可在 CentOS7 中使用。 (我有大约 60 个不同的操作系统来测试/创建应用程序和二进制包 .rpm、.deb)
    • 其实可能不是因为它需要旧版本。他们使用的开发 VM 使用 Fedora7,而不是 Centos7。我什至不确定这些差异意味着什么,但是在我的工作场所安装 Fedora 虚拟机并不是一件容易的事,但如果需要这样做也不是不可能的。
    • 好的,Fedora 7 旧版本:2007-05-31。很古老!你确定你的意思是 Fedora 7 吗? ?
    猜你喜欢
    • 2016-06-11
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2014-12-13
    • 2014-06-30
    • 1970-01-01
    相关资源
    最近更新 更多