/usr/bin/ld: 找不到 -ll
Posted
技术标签:
【中文标题】/usr/bin/ld: 找不到 -ll【英文标题】:/usr/bin/ld: cannot find -ll 【发布时间】:2017-02-03 06:05:57 【问题描述】:我正在运行make
,它将以下标志传递给ld
:
LDLIBS=-ll -ldl -lreadline -lcurses
但是,当运行 make
时,链接器失败并显示:
/usr/bin/ld: cannot find -ll
collect2: error: ld returned 1 exit status
我真的不确定-ll
指的是什么共享对象库,也不确定如何弄清楚。
我在 CentOS 机器上尝试这个,所以我尝试安装 'Development Tools'
包,认为它一定是非常通用的:
sudo yum groupinstall 'Development Tools'
但无济于事。
图书馆在哪里/是什么?任何帮助将不胜感激!谢谢!
【问题讨论】:
我相信libl
(-ll
试图加入)是 Solaris 的一部分。不确定是否有 Linux 等价物。
您是从某个库或项目中获取此 makefile 吗? -ll
会建议称为 libl
的东西,在线搜索建议将是 lex
。我不使用 CentOS/Redhat,但我会选择通用构建库,flex
和/或 bison
。
看来'Development Tools'
带有flex
和bison
,所以这些依赖已经满足了。此外,在 yum whatprovides libl
中找不到匹配项。感谢您的意见!
可以满足依赖关系,但必须在makefile搜索到的PATH中才能找到。我会检查以确保 libl 的路径在该路径中可用,修改路径以包含该文件,或显式路径。
你要构建什么包?
【参考方案1】:
TL;DR 给sudo apt-get install libfl-dev
。如果您发现此问题并正在使用 ubuntu,请尝试一下
我在 ubuntu(在 github 操作上)得到了这个,但没有在本地得到它。
通过阅读一些答案,我发现 libl.a
缺少什么,因此我在本地系统上将其追踪到这个包。
/usr/lib$ dpkg -S /usr/lib/x86_64-linux-gnu/libl.a
libfl-dev:amd64: /usr/lib/x86_64-linux-gnu/libl.a
所以我用sudo apt-get install libfl-dev
修复了 github 操作。
在本地它说它是我拥有的flex
的依赖项。我不确定这是否只是因为我在本地使用 LTS 版本,并且使用 latest
进行 CI。
【讨论】:
在 Debian 上,依赖 libfl-dev 是 flex 的推荐包,如果使用--no-install-recommends
,则不安装。【参考方案2】:
尝试重新安装 Bison 和 flex。sudo apt-get remove bison flex
sudo apt-get install bison flex
它对我有用。
【讨论】:
【参考方案3】:您可以使用以下命令找到哪个包提供的文件:
yum whatprovides "filename"
查看this answer 了解如何操作
【讨论】:
我做了yum whatprovides l
(因为图书馆会被称为l
)并得到No matches found
。
看起来它与 lex docs.oracle.com/cd/E36784_01/html/E36873/libl-3lib.html 有关。所以你需要在你的机器上安装 lex/yacc 支持
我相信我是通过yum
做到的,但感谢您的指点。我将验证它是否确实将其放置在ld
可见的默认共享库空间中。以上是关于/usr/bin/ld: 找不到 -ll的主要内容,如果未能解决你的问题,请参考以下文章
/usr/bin/ld:构建调试/obj/gpsitem.o:文件无法识别:文件被截断
/usr/bin/ld: 无法打开输出文件 bin/genericMatching: 没有这样的文件或目录
关于-static静态链接报出/usr/bin/ld: cannot find -lxxx的问题