【问题标题】:g++ link library x.so.2 without absolute pathg ++链接库x.so.2没有绝对路径
【发布时间】:2019-07-23 08:34:50
【问题描述】:

这是一个老问题,但我仍然找不到解决方案。

我有图书馆: /usr/lib/x86_64-linux-gnu/libqca.so.2(它是由软件包 libqca2 安装的,并且 packager 没有提供 libqca.so 链接,我也不想这样做,因为我正在寻找所有类似情况的答案,而不是仅用于 qca 示例)

那么我怎样才能包含它不提供 lib 完整路径名

  • g++ -L/usr/lib/x86_64-linux-gnu -lqca 将无法工作,因为 .2 扩展名
  • g++ -L/usr/lib/x86_64-linux-gnu -lqca.so.2 不允许
  • g++ -L/usr/lib/x86_64-linux-gnu qca.so.2 也不工作。

看起来很简单的问题,答案是什么。

如果有 gcc/g++ 知识的人可以 100% 说出来并描述一些关于它的内容,那么“NO IT CAN NOT”可能是正确的答案......但 gcc 有这两种信息并不奇怪(寻找的路径, 和正确的库名称)并且不能只是将它组合起来(就像使用 -l 参数对具有标准命名的库所做的那样)。

【问题讨论】:

  • 已经尝试过,例如g++ /usr/lib/x86_64-linux-gnu/libqca.so.2?如果它有效,你为什么不想使用它?
  • @Someprogrammerdude 因为我希望我的 Makefile 可以在任何地方工作(第一个 -L 部分我已经从 qt 构建链中获得)并且在某个地方它将是 /usr/lib64 ... 或者我有 10 个库可以包括为什么不只有一个 -L... 所以有 100 个原因。
  • 真的不可能制作一个简单的Makefile在任何地方工作。我建议您找到一些独立于平台的配置系统(例如 CMake)来为每个主机生成 makefile。
  • 这不是一个“随机”的建议。这是一个建议,可以帮助您继续进行便携式项目,而不必担心这些细节。尤其是因为使用普通 makefile 解决它的唯一方法是拥有很多,至少为每个目标平台提供一个(通过“平台”,我还包括不同的 Linux 发行版,甚至同一发行版的不同版本)。

标签: gcc linker g++ shared-libraries


【解决方案1】:

好的,我自己找到了答案,

它是关于冒号字符的,

-l:libqca.so.2

linux manuals 上找到的答案:-l namespec ... 如果 namespec 的格式为 :filename,ld 将在库路径中搜索名为 filename 的文件,否则它将在库路径中搜索名为 libnamespec 的文件.a

简单又酷

【讨论】:

  • 只是吹毛求疵。您的问题实际上是关于链接器(binutils)而不是编译器(gcc/g++)。
  • @Anton 它是关于链接器和编译器的,因为 gcc 使用相同的参数并将其发送到链接器。通常不直接调用 ld。所以它是关于链接的 gcc/g++ 参数。
猜你喜欢
  • 2021-12-14
  • 2018-11-06
  • 2020-08-07
  • 2014-03-14
  • 2018-10-15
  • 2015-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多