我正在使用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/
....
所以:我怎样才能告诉编译器/链接器/“无论需要知道什么”我的应用程序必须在相对路径“lib/libBox2D.so.2.1.0
”查找库。 (相对于工作目录)?
也许:问题可能出现在Box2D的下载页面(上面的链接)上,他们说它是版本2.1.2
而且该库是版本2.1.0
(如果我看到soname )?
PS:我也尝试将它放在我的项目文件夹的根目录中,但它没有成功......
非常感谢任何帮助 感谢
答案 0 :(得分:3)
如果您只是尝试新的库,那么在开发期间使用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, ...讨论了一系列与运行时路径配置相关的有趣信息。
答案 1 :(得分:2)
您需要设置LD_LIBRARY_PATH环境变量。
我应该补充说,通常不需要运送产品,但对于开发来说“很好”。阅读Why LD_LIBRARY_PATH is bad。
而且,对于一点背景,它是需要它的“装载机”。所以在运行你的程序之前设置它。
LD_LIBRARY_PATH
。像这样使用:
export LD_LIBRARY_PATH=/path/to/dir
./path/to/executable