【问题标题】:Linking to so library in gcc在 gcc 中链接到 so 库
【发布时间】:2013-03-31 07:03:30
【问题描述】:

首先我要说我是 gcc 和 makefile 的新手。我在桌面 (~/Desktop) 上有一个名为 lib.so 的 .so 文件。我想将我的程序(称为 myProgram)链接到它。我在makefile中写的是:

g++ myProgram.o -L ~/Desktop -l lib -o myProgram

当我运行make 时出现错误:

/usr/bin/ld: cannot find -llib

我也试过-l lib.so 并得到同样的错误。 什么是正确的链接方式?

【问题讨论】:

  • 当您使用-l foo 时,它会查找libfoo.so。所以-l lib 正在寻找liblib.so
  • 谢谢你,成功了。你应该把它写成答案。
  • 我不确定如何让它找到lib.so,因为它不遵循该命名约定。
  • 没关系,我将文件名更改为 libBenjy.so 并与 Benjy 链接,它起作用了。

标签: gcc linker shared-libraries


【解决方案1】:

两种解决方案:

  1. 将文件重命名为libsomething.so,然后使用-l something。链接器会自动用lib 前缀和.so 后缀(或.a 后缀静态库)包装名称。

  2. 使用选项-l :lib.so。当您在名称前加上 : 时,链接器将使用给定的名称。

这些在ld 手册页中有解释。

【讨论】:

  • 另一个快速的问题,运行应用程序时出现错误“无法打开共享对象文件:没有这样的文件或目录”。我如何告诉他在运行时使用加载库?
  • 目录应该在您的 LD_LIBRARY_PATH 环境变量中。
  • 由于某种原因,我没有 LD_LIBRARY_PATH 环境变量,但我不会再麻烦你了。
  • 如果你想在非标准的地方找到库,你只需要那个变量。
  • 您可以将 rpath 添加到可执行文件。这种方式在执行 exe 时将查看此路径(除了 LD_LIBRARY_PATH)。您可以通过这种方式添加 rpath:gcc .... -Wl,-rpath=/path/to/sharedlibrary/folder
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-09
  • 2018-07-14
相关资源
最近更新 更多