ld链接问题:/usr/bin/ld无法找到[库名称]。

5

我正在使用Qmake在Ubuntu 9.10上构建一个共享库。

这个共享库(A)依赖于另一个共享库(B)。

项目B已经成功构建。

在项目A的.pro文件中,我的LIBS变量如下所示:

LIBS += -L../datelib/bin -llibdatelib_release.so.1.0.0

我使用完整的shlib名称,因为库版本不同。

无论如何,当我尝试构建A项目时,在链接阶段会出现错误,并打印以下错误消息:

/usr/bin/ld: cannot find -llibdatelib_release.so.1.0.0
collect2: ld returned 1 exit status
make[1]: ***[bin/libprojecta_release.so.6.0.0] Error 1
make ***[release] Error 2
Exited with code 2

从错误信息来看,我认为ld在抱怨无法找到libdatelib文件,因此我手动将其复制到了/usr/lib/目录下。然而,这并没有解决问题,我仍然收到相同的错误信息。有人知道如何修复这个问题吗?
[编辑]
我对使用gcc进行构建还很新。我知道如何创建符号链接,但我应该为lnk指令使用哪些路径?我想要链接的文件位于/home/username/work/cppdev/datelib/bin 目录下。此外,我使用的构建系统(qmake)会自动在构建过程中创建符号链接,因此我已经在/home/username/work/cppdev/datelib/bin文件夹中拥有以下文件:
- libdatelib_release.so (符号链接) - libdatelib_release.so.1 (符号链接) - libdatelib_release.so.1.0 (符号链接) - libdatelib_release.so.1.0.0 (共享库)
我可能不得不问另一个问题来解释为什么有这么多符号链接(有什么意义?),以及为什么我不能直接链接到共享库,而必须通过符号链接进行操作。我已经阅读了一些在线文档,但迄今为止我所看到的似乎更像是规定/传统,而不是Linux链接时所需的实际技术原因。
3个回答

9
您不能以这种方式使用-l。-l只能通过-lFOO查找类似libFOO.so的名称。如果您想在构建中像这样指定它,则需要一个没有版本号的符号链接。
类似以下内容:
ln -s /the/path/to/the/libthing.so.1.0.0 /the/path/to/the/libthing.so

现在-lthing将不起作用。

抱歉,我在Linux上构建方面还很新。我知道如何创建符号链接,但是lnk命令要使用哪些路径呢?我想要链接的文件位于/home/username/work/cppdev/datelib/bin。 - Stick it to THE MAN

3

库名前缀“lib”会自动添加 - 使用:

LIBS += -L../datelib/bin -ldatelib_release.so.1.0.0

0

您可以提供完整路径。例如:

LIBS += ../datelib/bin/libdatelib_release.so.1.0.0

不过我建议你按照bmargulies的建议去做:创建符号链接并添加-ldatelib_release。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接