2010-06-10 49 views
4

该应用程序是一个Firefox插件(从$ HOME/.mozilla/plugins加载),所以设置LD_LIBRARY_PATH的包装脚本不是一个简单的选项。运行带有共享库的GNU/Linux Firefox插件(用于安装时无需root访问)

据我所知,RPATH不能引用$ HOME并且只能是绝对路径。

Firefox尝试从〜/ .mozilla/plugins中删除它的插件,但失败(因为它取决于用户主目录中某处安装的共享库)。

在Firefox附近修改Firefox菜单项以提供一个封装(使用LD_LIBRARY_PATH)太冒险了。

安装程序脚本应该执行哪些操作(无需root访问权限)以制作取决于共享库的标准Firefox加载插件?

  1. 我应该试着让所有东西都嵌入到.so中去除依赖关系吗?
  2. 我应该在安装阶段尝试让安装程序脚本完成链接或修补RPATH吗?
+0

在安装程序中包含“patchelf”,它将检测到的路径修补到正在安装的插件。 – 2010-06-11 12:51:55

+0

用$ ORIGIN删除了带有“patchelf”和硬编码路径的黑客 – 2010-06-11 19:48:24

回答

4

将RPATH设置为$ORIGIN/lib,这样加载器就会查找与我的文件相关的库。

脚本只是解包插件$HOME/.mozilla/plugins/myplugin.so和库$HOME/.mozilla/plugins/lib/

rpath中可以指定通过添加Wl,-rpath,'$ORIGIN/lib'$应以生成文件被加倍)进行接头虽然gcc和也可以编译后通过patchelf被改变。

+0

顺便说一下,您可以通过$ ORIGIN /../获得$ HOME。 – 2011-07-14 06:04:50

+0

是的,它已经这样做了。 – 2011-07-14 13:40:13