gpt4 book ai didi

ubuntu - ld联动问题:/usr/bin/ld: cannot find [libraryname]

转载 作者:太空宇宙 更新时间:2023-11-03 16:48:43 24 4
gpt4 key购买 nike

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

此共享库 (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 进行构建还很陌生。我知道如何创建符号链接(symbolic link),但我应该为 lnk 命令使用哪些路径?。我要链接到的文件位于/home/username/work/cppdev/datelib/bin。

我使用的构建系统 (qmake) 也会自动创建符号链接(symbolic link)作为构建的一部分,因此我的/home/username/work/cppdev/datelib/bin 文件夹中已经有以下文件:

  • libdatelib_release.so(符号链接(symbolic link))
  • libdatelib_release.so.1(符号链接(symbolic link))
  • libdatelib_release.so.1.0(符号链接(symbolic link))
  • libdatelib_release.so.1.0.0(共享库)

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

最佳答案

你不能那样使用 -l。 -l 只能通过 -lFOO 找到名称类似于 libFOO.so 的东西。如果你想在构建中这样指定它,你需要一个没有版本号的符号链接(symbolic link)。

类似于:

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

现在 -lthing 将起作用。

关于ubuntu - ld联动问题:/usr/bin/ld: cannot find [libraryname],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2288444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com