eclipse - C++ : How to link a library, 位于我的项目文件夹中?

标签 eclipse linker shared-libraries

我正在使用 Linux 和 Eclipse。
我想使用一个库 ( Box2D )。我有 lib 文件“libBox2D.so.2.1.0”。我把它放在我的项目文件夹(也是可执行文件的工作目录)中的一个自制的 lib 文件夹中。
我将 -lBox2D 添加到链接器命令行参数。 (这意味着我在 Eclipse GUI 中添加了“Box2D”作为库)。

但是当我尝试运行它时,我的应用程序自动打印他找不到“libBox2D.so.2.1.0”库文件,并显示以下消息:

error while loading shared libraries: libBox2D.so.2.1.0: cannot open shared object file: No such file or directory

我认为他正在 /usr/lib/ 中搜索这个库....

那么:我如何告诉编译器/链接器/“whatever-that-needs-to-know-it”我的应用程序必须在相对路径“lib/libBox2D”中查找库.so.2.1.0”(相对于工作目录)?

也许:问题是在 Box2D 的下载页面(上面的链接)上,他们说它是 2.1.2 版本,而那个库是 2.1.0(如果我查看 soname)?

PS:我也试过把它放在我项目文件夹的根目录下,但是没有成功...

如有任何帮助,我们将不胜感激。
谢谢

最佳答案

如果您只是尝试一个新的库,那么在开发过程中使用 LD_LIBRARY_PATH 就可以了。事实上,这是 最合适 LD_LIBRARY_PATH 的用法。如果您正在寻找有关如何设计和部署共享组件的建议,请继续阅读。

如果您的目标是让您的应用程序从相对于应用程序的位置加载共享库,那么您可能应该考虑在链接时将运行时链接路径信息添加到您的可执行文件中。加载的运行时使用几种不同的机制在应用程序加载时定位共享对象和依赖对象。

  • 最常用的方法是包含共享库的完整路径名。这是大多数链接器默认执行的操作。
  • 另一种方法是仅包含库名称并让加载程序搜索配置的运行时路径(例如,由 ldconfig 设置的路径、使用 LD_LIBRARY_PATH 等配置的路径)。
  • 您正在寻找的方法是对相对运行时搜索路径进行编码

最后一个选项的实现方式因操作系统和编译器选择而异。我猜你正在 Linux 机器上使用 GNU 工具链,所以看看 ld -rpath选项。有一些很好的例子 - Avoiding LD_LIBRARY_PATH提到 ld -rpath '$ORIGIN/../lib' 作为选项,Dynamic Libraries, RPATH, ...讨论了一堆与运行时路径配置相关的有趣信息。

关于eclipse - C++ : How to link a library, 位于我的项目文件夹中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3219171/

相关文章:

C++ 链接失败-ld : cannot find [makefile] [gcc/cygwin]

python - 为在 AWS Lambda 中使用的 python 包指定 C(++) 依赖项

使用结构接口(interface)和附加 C 文件在 main 中调用 C 函数

c# - 在 Silverlight 中的服务器和客户端项目之间共享类

eclipse - 有没有办法在 Wolfram Workbench 2.0 中输入希腊字母?

eclipse - 如何在 Windows 上安装多个 JDK?

eclipse - 在 Play Framework 2.0 中使用 Eclipse

c - AIX 中的共享对象加载?

linux - 覆盖库文件导致段错误

eclipse Mercurial插件安装错误