ld 找不到现有库
- 2024-10-11 08:36:00
- admin 原创
- 69
问题描述:
我正在尝试在这个 Debian lenny 系统上将一个应用程序与 g++ 链接起来。ld 抱怨它找不到指定的库。这里的具体示例是 ImageMagick,但我也遇到了其他几个库的类似问题。
我正在使用以下命令调用链接器:
g++ -w (..lots of .o files/include directories/etc..) \n-L/usr/lib -lmagic
ld 抱怨:
/usr/bin/ld: cannot find -lmagic
但是,libmagic 存在:
$ locate libmagic.so
/usr/lib/libmagic.so.1
/usr/lib/libmagic.so.1.0.0
$ ls -all /usr/lib/libmagic.so.1*
lrwxrwxrwx 1 root root 17 2008-12-01 03:52 /usr/lib/libmagic.so.1 -> libmagic.so.1.0.0
-rwxrwxrwx 1 root root 84664 2008-09-09 00:05 /usr/lib/libmagic.so.1.0.0
$ ldd /usr/lib/libmagic.so.1.0.0
linux-gate.so.1 => (0xb7f85000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7f51000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7df6000)
/lib/ld-linux.so.2 (0xb7f86000)
$ sudo ldconfig -v | grep "libmagic"
libmagic.so.1 -> libmagic.so.1.0.0
我该如何进一步诊断这个问题?可能出了什么问题?我是不是做了一件非常愚蠢的事情?
解决方案 1:
问题是链接器正在寻找libmagic.so
,但你只有libmagic.so.1
一个快速的破解方法是符号链接libmagic.so.1
到libmagic.so
解决方案 2:
正如 grepsedawk 所表述的,答案在于选项-l
,g++
即调用ld
。如果您查看此命令的手册页,您可以执行以下操作:
g++ -l:libmagic.so.1 [...]
或者:
g++ -lmagic [...]
如果你的库路径中有一个名为 libmagic.so 的符号链接
解决方案 3:
Debian 习惯将共享库分为运行时组件(libmagic1: /usr/lib/libmagic.so.1 → libmagic.so.1.0.0
)和开发组件(libmagic-dev: /usr/lib/libmagic.so → …
)。
因为库的 soname 是libmagic.so.1
,所以它是嵌入到可执行文件中的字符串,因此它是运行可执行文件时加载的文件。
但是,由于该库是针对-lmagic
链接器指定的,因此它会查找libmagic.so
,这就是为什么开发需要它的原因。
有关这一切在 Linux 上如何运作的详细信息,请参阅Diego E. Pettenò:链接器和名称。
简而言之,你应该apt-get install libmagic-dev
。这不仅会给你,libmagic.so
还会给你编译所需的其他文件,比如/usr/include/magic.h
。
解决方案 4:
在 Ubuntu 中,您可以安装libtool
可自动解析库的程序。
$ sudo apt-get install libtool
这为我解决了一个问题ltdl
,它已安装为但在 make 中libltdl.so.7
找不到。-lltdl
解决方案 5:
如上所述,链接器正在寻找libmagic.so
,但您只有libmagic.so.1
。
要解决这个问题,只需执行更新缓存。
ldconfig -v
为了验证您是否可以运行:
$ ldconfig -p | grep libmagic
解决方案 6:
除非我大错特错libmagic
,或者-lmagic
它与 ImageMagick 不是同一个库。您声明您想要 ImageMagick。
ImageMagick 附带一个实用程序,可为编译器提供所有适当的选项。
前任:
g++ program.cpp `Magick++-config --cppflags --cxxflags --ldflags --libs` -o "prog"
解决方案 7:
从 Ubuntu repo 安装 libgl1-mesa-dev 为我解决了这个问题。
解决方案 8:
我尝试了上面提到的所有解决方案,但没有一个能解决我的问题,但最终我使用以下命令解决了它。
sudo apt-get install libgmp3-dev
这将产生神奇的效果。
解决方案 9:
解决此问题的另一种方法是安装该-devel
包。
如果编译器正在寻找libabc.so
您有的libabc.so.1
,您需要安装该-devel
包,libabc-devel
就像libabc.so.1
一个运行时库但是libabc.so
一个开发库一样。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件