太长,读不下去了
ExtUtils::MakeMaker
RPATH
报关进口
.dynamic
部分。但是你可以预先加载所需的库,
$ LD_PRELOAD=path/to/custom/libxml2/.libs/libxml2.so.2 ldd ./blib/arch/auto/XML/LibXML/LibXML.so
或者让加载程序忽略
路径
进入,
$ LD_LIBRARY_PATH=path/to/custom/libxml2/.libs /usr/lib/ld-linux-x86-64.so.2 --inhibit-rpath /abs/path/to/LibXML.so /abs/path/to/perl ./1.pl
或转换
路径
进入
RUNPATH
一个,
$ chrpath --convert blib/arch/auto/XML/LibXML/LibXML.so
进入,
$ chrpath --delete blib/arch/auto/XML/LibXML/LibXML.so
或指定
XMLPREFIX
变量,
$ perl Makefile.PL XMLPREFIX=path/to/custom/libxml2/build
在引擎盖下
ExtUtils::Liblist::ext()
获取要链接的库的列表,如
-lxml2 -lz -llzma -licui18n -licuuc -licudata -lm -ldl
,并将其转化为
four
five
variables
,它们进入了
Makefile
. 其中之一就是
LD_RUN_PATH
. 它包含找到库的所有路径。
$is_dyna
如果库是动态的(不是
ends
具有
.a
$is_perl
built
具有
it
,和
%ld_run_path_seen
LD\u运行路径
那部分
calculates
,生成部分Makefile
variable
,以及传递给
linker
后果
LD\u运行路径
路径
-rpath=目录
这在将ELF可执行文件与共享对象链接时使用。将所有-rpath参数串联起来并传递给运行时链接器,后者使用它们在运行时定位共享对象。-rpath选项也用于定位链接中显式包含的共享对象所需的共享对象;请参阅-rpath-link选项的描述。
https://jlk.fjfi.cvut.cz/arch/manpages/man/core/binutils/ld.1.en
如果共享对象依赖项不包含斜杠,则按以下顺序搜索:
o使用
二进制文件的动态节属性(如果存在)和DT\u运行路径属性不存在。不推荐使用DT\u RPATH。
o使用环境变量
LD\库\路径
https://jlk.fjfi.cvut.cz/arch/manpages/man/core/man-pages/ld.so.8.en
$ perl Makefile.PL
$ make
结果,
$ readelf --dynamic ./blib/arch/auto/XML/LibXML/LibXML.so | grep RPATH
0x000000000000000f (RPATH) Library rpath: [/usr/lib]
$ objdump -x ./blib/arch/auto/XML/LibXML/LibXML.so | egrep RPATH
RPATH /usr/lib
$ LD_LIBRARY_PATH=path/to/custom/libxml2/.libs ldd ./blib/arch/auto/XML/LibXML/LibXML.so | grep libxml2
libxml2.so.2 => /usr/lib/libxml2.so.2 (0x00007f6cfabb2000)
--dynamic
-显示的内容
.动态
第节,
-x
-显示所有标题。
解决这个问题的一种方法是预加载所需的
libxml2
$ LD_PRELOAD=path/to/custom/libxml2/.libs/libxml2.so.2 ldd ./blib/arch/auto/XML/LibXML/LibXML.so | grep libxml2
path/to/custom/libxml2/build/lib/libxml2.so.2 (0x00007fe183aeb000)
另一个是说
Makefile.PL
搜索
库xml2
在所需的位置(编译时)。
$ perl Makefile.PL XMLPREFIX=path/to/custom/libxml2/build
$ make
$ readelf --dynamic ./blib/arch/auto/XML/LibXML/LibXML.so | grep RPATH
0x000000000000000f (RPATH) Library rpath: [path/to/custom/libxml2/build/lib:/usr/lib]
$ objdump -x ./blib/arch/auto/XML/LibXML/LibXML.so | egrep RPATH
RPATH path/to/custom/libxml2/build/lib:/usr/lib
$ ldd ./blib/arch/auto/XML/LibXML/LibXML.so | grep libxml2
libxml2.so.2 => path/to/custom/libxml2/build/lib/libxml2.so.2 (0x00007fe183aeb000)
要调试吗
XML::LibXML
,您可以使用
OPTIMIZE
-B
如果图书馆已经建好了,就要重建一切),
$ make OPTIMIZE='-g3 -O0'
-O2
,没有
-g
LDDLFLAGS
,但不确定这是否重要。
或者,
WriteMakeFile
拿
参数,以便可以添加一行
here
,
'OPTIMIZE' => '-g3 -O0'
或者可以添加变量
here
生成文件.PL
,
$ perl Makefile.PL OPTIMIZE='-g3 -O0'