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

时间:2010-02-18 12:12:10

标签: ubuntu makefile linker qmake ld

我正在使用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(sym link)
  • libdatelib_release.so.1(sym link)
  • libdatelib_release.so.1.0(sym link)
  • libdatelib_release.so.1.0.0(shared lib)

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

3 个答案:

答案 0 :(得分:9)

你不能以这种方式使用-l。 -l只能通过-lFOO找到名称如libFOO.so的东西。如果要在构建中指定它,则需要没有版本号的符号链接。

类似的东西:

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

现在 - 它会起作用。

答案 1 :(得分:3)

前缀'lib'会自动添加到库名中 - 使用:

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

答案 2 :(得分:0)

您可以提供完整路径。即。

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

但是我会建议你做bmargulies建议:创建symolic链接并添加-ldatelib_release