有没有办法在Linux上构建一个没有文本重定位的libxml2?

有没有办法在Linux上构建一个没有文本重定位的libxml2?,linux,libxml2,selinux,Linux,Libxml2,Selinux,下午好 我在使用libxml2时遇到困难 我尝试构建Perl模块XMLlibXML,它是我们标准运行时环境的一部分。但是,这次在RHEL5盒上的安装失败,因为构建过程抱怨缺少libxml2: $> perl Makefile.PL LIB=/foo/lib/perl PREFIX=/foo INSTALLDIRS=site enable native perl UTF8 running xml2-config...ok (2.7.6) looking for -lxml2... no looki

下午好

我在使用libxml2时遇到困难

我尝试构建Perl模块XMLlibXML,它是我们标准运行时环境的一部分。但是,这次在RHEL5盒上的安装失败,因为构建过程抱怨缺少libxml2:

$> perl Makefile.PL LIB=/foo/lib/perl PREFIX=/foo INSTALLDIRS=site enable native perl UTF8 running xml2-config...ok (2.7.6) looking for -lxml2... no looking for -llibxml2... no libxml2 not found Ans,因为我们在目标机器上激活了SElinux,链接libxml.2失败

是否有可能正确创建
libxml2
,或者我是否必须要求管理员扭曲SElinux以允许重新定位

我真不敢相信我是唯一一个在SElinux活动的Linux上出现这个问题的人。我错过了什么

请帮忙

问候,,
Stefan

最简单的方法是让管理员
yum安装libxml2-devel
甚至
yum安装perl-XML-LibXML
。否则,请查看是否可以将
-fPIC
添加到
Makefile.PL
中的CFLAGS中


我假设您使用的是32位x86,如果没有
-fPIC

,任何其他体系结构都无法工作。我刚刚找到了一个可能的解释:

在构建libxml2的过程中,确实使用了编译器标志-fPIC,因此代码是独立于位置创建的,但是

创建共享库时,静态libz将与之链接。这就是我问题的根源吗?在共享可执行文件中包含静态库会引入不可重定位的代码,从而污染库吗


事实上,eu findtextrel的符号应该已经为我指明了方向,因为
crc32
get\u crc\u table
等看起来像是以加密为中心的代码…

据我所知,-fPIC需要转到libxml2的Makefile,或者我在这里错了吗?是的,或者您可以尝试先导出CFLAGS=-fPIC,尽管这可能会消除现有的重要CFLAGS。是的!我只有一个静态libz这一事实引起了我所有的麻烦。一旦动态libz.so可用,问题就消失了!:-) perl Makefile.PL LIB=/usr/inform/target/lib/perl PREFIX=/usr/inform/target INSTALLDIRS=site [...] Can't load 'blib/arch/auto/Conftest/Conftest.so' for module Conftest: /usr/inform/target/lib/libxml2.so.2: cannot restore segment prot after reloc: Permission denied at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230. at test.pl line 2 [...] [tess91@INF-AW] lib$ eu-findtextrel libxml2.so.2.7.6 the file containing the function 'get_crc_table' is not compiled with -fpic/-fPIC the file containing the function 'crc32' is not compiled with -fpic/-fPIC the file containing the function 'gzerror' is not compiled with -fpic/-fPIC [...]