我们正在SELinux环境中测试我们的应用程序。现在,我们收到以下错误:
dlopen failed to load libFoo.so -libFoo.so: cannot restore segment prot after reloc: Permission denied
据我所知my searches,这与共享库中.text
部分的重定位有关。据我所知,我们已经将-fPIC
用于所有共享库。虽然可能还有一些静态库也链接到这些共享库中。
如何找出导致此错误的重定位/符号弹出?我应该在共享库的nm
或objdump -rR
输出中查找什么内容?
或者我正在寻找错误的信息,问题出在除了共享库中生成的重定位之外的其他地方?
答案 0 :(得分:1)
我找到了这个:http://akkadia.org/drepper/textrelocs.html,这基本上归结为使用eu-findtextrel
查看确实存在哪些文本重定位的建议。使用-fPIC
重新编译受影响的库然后解决问题。
答案 1 :(得分:0)
我认为这是一个很好的建议,因为它没有将SELinux设置为许可模式。
您也可以从here。
chcon -t texrel_shlib_t <lib>
例如
chcon -t texrel_shlib_t libmylib.so
但是,这仍然是围绕着SELinux,所以-fPIC就是这样做的。我有一些问题,因为我错误地将-fPIC放入链接器标志中。 -fPIC是一个编译器选项!