当前位置: 首页 > 知识库问答 >
问题:

usr/bin/ld:找不到-l

裴俊迈
2023-03-14

我试图编译我的程序,它返回这个错误:

usr/bin/ld: cannot find -l<nameOfTheLibrary>

在我的makefile中,我使用命令g并链接到我的库,这是一个符号链接到我位于其他目录上的库。

是否有一个选项添加,使其工作,请?

共有3个答案

边国安
2023-03-14

似乎没有任何答案可以解决初学者一开始就无法安装所需库的常见问题。

在Debianish平台上,如果缺少libfoo,您可以经常使用以下方法安装它

apt-get install libfoo-dev

开发工作需要包的-dev版本,即使是一些琐碎的开发工作,例如编译源代码以链接到库。

包名有时需要一些修饰(libfoo0-devfoo-dev,不带lib前缀?等),或者您可以简单地使用发行版的包搜索来准确地找出哪些包提供了特定的文件

(如果不止一个,您需要找出它们的区别。选择最酷或最流行的是一条常见的捷径,但对于任何严肃的开发工作来说都不是一个可接受的过程。)

对于其他架构(最显著的是RPM),类似的过程也适用,尽管细节会有所不同。

公西翊歌
2023-03-14

如果您的库名是saylibxyz。因此它位于路径上,比如:

/home/user/myDir

然后将其链接到您的程序:

g++ -L/home/user/myDir -lxyz myprog.cpp -o myprog
郤令
2023-03-14

要弄清楚链接器在寻找什么,请在详细模式下运行它。

例如,我在尝试编译支持ZLIB的MySQL时遇到了这个问题。我在编译期间收到了这样的错误:

/usr/bin/ld: cannot find -lzlib

我做了一些傻事,不断地遇到同一类的不同问题,人们会说要确保结果。所以文件实际上存在,如果它不存在,那么创建一个到版本文件的符号链接,例如zlib。所以1.2.8. 但是,当我检查时,zlib。确实存在。所以,我想,这肯定不是问题所在。

我在互联网上看到另一篇帖子,建议使用LD_DEBUG=all运行make:

LD_DEBUG=all make

虽然我得到了一吨调试输出,但实际上并没有帮助。这比其他任何事情都更令人困惑。所以,我就要放弃了。

然后,我顿悟了。我想实际检查ld命令的帮助文本:

ld --help

由此,我了解了如何在详细模式下运行ld(想象一下):

ld -lzlib --verbose

这是我得到的输出:

==================================================
attempt to open /usr/x86_64-linux-gnu/lib64/libzlib.so failed
attempt to open /usr/x86_64-linux-gnu/lib64/libzlib.a failed
attempt to open /usr/local/lib64/libzlib.so failed
attempt to open /usr/local/lib64/libzlib.a failed
attempt to open /lib64/libzlib.so failed
attempt to open /lib64/libzlib.a failed
attempt to open /usr/lib64/libzlib.so failed
attempt to open /usr/lib64/libzlib.a failed
attempt to open /usr/x86_64-linux-gnu/lib/libzlib.so failed
attempt to open /usr/x86_64-linux-gnu/lib/libzlib.a failed
attempt to open /usr/local/lib/libzlib.so failed
attempt to open /usr/local/lib/libzlib.a failed
attempt to open /lib/libzlib.so failed
attempt to open /lib/libzlib.a failed
attempt to open /usr/lib/libzlib.so failed
attempt to open /usr/lib/libzlib.a failed
/usr/bin/ld.bfd.real: cannot find -lzlib

叮,叮,叮。。。

因此,为了最终修复它,以便我可以使用我自己的ZLIB版本(而不是捆绑版本)编译MySQL:

sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so

瞧!

 类似资料:
  • 问题内容: 我正在尝试编译我的程序,它返回此错误: 在我的makefile文件中,我使用命令并链接到我的库,这是到我的库的另一个目录的符号链接。 是否可以添加选项以使其正常工作? 问题答案: 如果您的图书馆名称是say 并且位于路径上,请说: 然后将其链接到您的程序:

  • 问题内容: 我正在尝试使用Python 2.7安装MySQLdb。我收到的错误如下所示: 显然,它找不到Python 2.7。展望我看到: 该符号是什么意思?谁能建议对此错误采取补救措施? 问题答案: 它找不到Python库,而不是可执行文件。运行以查看Python库的位置,然后将其添加到库路径(例如,如果位于中,则要调用)。 该符号意味着该文件是一个符号链接; 表示它是可执行文件(这些文件由产生

  • 因此,我试图使用make-f Makefile编译一个程序,但我得到了以下错误/usr/bin/ld:not find-lgd 生成文件: 替换(libgd.a libgd.la libgd.so libgd.so.2 libgd.so.2.0.0)后,我收到以下错误:

  • 我正在按照帮助中的coder教程进行操作。使用时,出现如下错误: /usr/bin/ld:找不到-lstdc Collect2:ld返回1退出状态 但是在 中都有库

  • 我在/usr/local/lib中有libcommon.so,我在程序中链接了这个库。 gcc -o测试test _ Prog . c-L/usr/local/lib-llib common . so 我也试过这个 gcc -o test test_prog.c -L/usr/local/lib -llibcommon 是给予 /usr/bin/ld: 找不到 -llibcommon.so 收集

  • 我的应用程序需要libpq、paho mqtt库和mqtt代理。我已将它们安装并构建在我的应用程序的单独文件夹中。当我试图使用“make”命令构建我的应用程序时,我遇到了/usr/bin/ld:cannotfind-lpq错误。如何将应用程序目录链接到libpq库?