我正在开发一个Firefox插件,它使用外部库在浏览器上渲染3D图形。
问题是我希望插件使用包含它的外部库而不更改LD_LIBRARY_PATH
变量。
库安装在相对于插件的位置(也是共享库),而实际的可执行文件(即浏览器)可以完全位于其他地方。
我在Ubuntu上测试它(在Windows版本的插件没有问题)我的依赖是OpenSceneGraph库和静态编译将使插件真的很大(如果有另一个,则不是一个选项)。
链接时使用rpath选项并指定'特殊'路径$ ORIGIN。
例:
-Wl,-R,'$ORIGIN/../lib'
这是一个详细阐述使用$ ORIGIN:http://www.itee.uq.edu.au/~daniel/using_origin/的网站
您可以在编译期间使用-L
标志来指定链接器可以找到共享对象的相对路径。
如果您已经生成了lib,则可以通过直接调用ld
command进行链接。
提示:您可以使用unix命令nm
轻松检查lib中是否定义了某些符号。这是检查链接是否完好的有用方法。
(如果我是你,我会像你在帖子中所说的那样暂时改变LD_LIBRARY_PATH
。你为什么不想这样做?)
出于安全原因使用相对rpath是错误的,
你应该使用libdl函数(dlopen等)