Ubuntu ld链接问题:/usr/bin/ld:找不到[libraryname]

Ubuntu ld链接问题:/usr/bin/ld:找不到[libraryname],ubuntu,makefile,linker,qmake,ld,Ubuntu,Makefile,Linker,Qmake,Ld,我正在使用Qmake在Ubuntu 9.10上构建一个共享库 此共享库(A)依赖于另一个共享库(B) 项目B已成功建成 在项目A的.pro文件中,my LIBS变量如下所示: LIBS += -L../datelib/bin -llibdatelib_release.so.1.0.0 (我使用了完整的shlib名称,因为库版本不同。) 在任何情况下,当我尝试构建项目A时,它在链接阶段中断,并打印错误消息: /usr/bin/ld: cannot find -llibdatelib_releas

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

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

项目B已成功建成

在项目A的.pro文件中,my 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(sym-link)
  • libdatelib_release.so.1.0.0(共享库)

我可能需要问另一个问题来解释为什么有这么多符号链接(有什么意义?),以及为什么我不能直接链接到共享库,而必须通过符号链接。我读过一些在线文档,但到目前为止,我所看到的似乎更像是格言/传统,而不是在Linux上链接时需要这种抽象级别的实际技术原因。

你不能那样使用-l-我只能通过-lFOO找到像libFOO这样的名字。如果希望在生成中这样指定,则需要一个不带版本号的符号链接

比如:

ln -s /the/path/to/the/libthing.so.1.0.0 /the/path/to/the/libthing.so

现在-L将起作用。

前缀“lib”将自动添加到库名称中-使用:

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

您可以提供完整路径。i、 e

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

不过,我建议您按照bmargulies的建议去做:创建symolic链接并添加-ldatelib_发行版

对不起,我对在Linux上构建很陌生。我知道如何创建符号链接,但lnk命令使用哪些路径?。我要链接到的文件位于/home/username/work/cppdev/datelib/bin中