- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我是一名优秀的程序员,十分优秀!