如何使用相对路径从共享库链接到共享库

leo*_*amu 21 linux linker gcc shared-libraries

我正在开发一个Firefox插件,它使用外部库在浏览器上渲染3D图形.

问题是我希望插件使用包含它的外部库而不更改LD_LIBRARY_PATH变量.
这些库安装在相对于插件的位置(也是共享库),而实际的可执行文件(即浏览器)可以完全位于其他地方.

你必须知道的一些事情.我在Ubuntu上测试它(在Windows版本的插件没有问题)我的依赖是OpenSceneGraph库和静态编译将使插件真的很大(如果有另一个,则不是一个选项)

希望你能帮我

最好的祝福.

lot*_*har 26

链接时使用rpath选项并指定'特殊'路径$ ORIGIN.

例:

-Wl,-R,'$ORIGIN/../lib'
Run Code Online (Sandbox Code Playgroud)

这是一个详细介绍使用$ ORIGIN的网站:http: //www.itee.uq.edu.au/~daniel/using_origin/

  • 链接坏了(5岁是的我知道:)) (5认同)

ThR*_*R37 0

您可以-L在编译期间使用该标志来指定链接器可以找到共享对象的相对路径。

如果您已经生成了库,则可以通过直接调用ld命令进行链接。

提示: 您可以使用unix 命令轻松检查lib 中是否定义了某些符号nm。这是检查链接是否良好的有用方法。

(如果我是你,我只会暂时更改LD_LIBRARY_PATH你在帖子中所说的内容。你为什么不想这样做?)