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

时间:2010-10-18 15:23:31

标签: linux gcc linker shared-libraries

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

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

我在Ubuntu上测试它(Windows版本的插件没问题) 我的依赖项是OpenSceneGraph库,静态编译会使插件非常大(如果有另一个插件则不是选项)。

3 个答案:

答案 0 :(得分:26)

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

示例:

-Wl,-R,'$ORIGIN/../lib'

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:-2)

出于安全原因使用相对rpath是错误的,

你应该使用libdl函数(dlopen等)