如何从共享库链接到相对path的共享库

我正在使用外部库在浏览器上渲染3Dgraphics的Firefox插件。

问题是,我希望插件使用与其一起打包的外部库,而无需更改LD_LIBRARY_PATHvariables。
这些库安装在相对于插件(共享库)的位置,而实际的可执行文件(即浏览器)可以位于其他地方。

有些事情你必须知道。 我在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等)