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