1

我们正在 SELinux 环境中测试我们的应用程序。现在,我们收到以下错误:

dlopen failed to load libFoo.so -libFoo.so: cannot restore segment prot after reloc: Permission denied

据我从搜索中了解到,这与.text共享库中的部分中的重定位有关。据我所知,我们已经在使用-fPIC我们所有的共享库。尽管可能有一些静态库也链接到这些共享库中。

如何找出导致此错误弹出的重定位/符号?我应该在共享库中查找nm或输出什么?objdump -rR

还是我在寻找错误的信息,而问题出在共享库中产生的重定位之外的其他地方?

4

2 回答 2

1

我发现了这个:http ://akkadia.org/drepper/textrelocs.html ,它基本上归结为一个建议,用于eu-findtextrel查看确实存在哪些文本重定位。使用 then 重新编译受影响-fPIC的库可以解决问题。

于 2013-10-07T22:14:17.653 回答
0

我认为这是一个很好的建议,因为它没有将 SELinux 设置为许可模式。

你也可以从这里

chcon -t texrel_shlib_t <lib>

所以例如

chcon -t texrel_shlib_t libmylib.so

但是,这仍然在 SELinux 中流行,所以 -fPIC 是这样做的方法。我遇到了一些问题,因为我错误地将 -fPIC 放入了链接器标志中。-fPIC 是一个编译器选项!

于 2015-10-21T15:51:53.873 回答