我在RHL5平台上安装Term :: Readline :: Gnu cpan包。构建正确完成但在运行make test时我在t / callback.t中面临以下错误:
perl:符号查找错误:perl / 5.20.2 / ext / lib / libXrender.so.1:未定义符号:_XGetRequest
我做了一些初步检查以找出根本原因。
# ldd -d -r libXrender.so.1 => no undefined symbol
linux-gate.so.1 => (0xffffe000)
libX11.so.6 => [proper X11 library path]
libxcb.so.1 => [proper Xcb library path]
libXau.so.6 => [proper Xau library path]
libXdmcp.so.6 => [proper Xdmcp library path]
libdl.so.2 => /lib/libdl.so.2 (0xf7dc70000
libc.so.6 => /lib/libc.so.6 (0xf7c6b000)
/lib/ld-linux.so.2 (0x00824000)
库路径不是/ usr / lib
之类的标准路径# readelf -a libXrender.so.1 | grep "_XGetRequest"
00009e2c 00003107 R_386_JUMP_SLOT 00000000 _XGetRequest
49: 00000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest
113: 00000000 0 FUNC GLOBAL DEFAULT UND _XGetRequest
readelf -a libXrender.so.1 | grep RPATH
存在正确的X11库路径。
我发现libX11.so.6包含该符号。
我的问题是:
虽然X11库路径正确放置在libXrender的RPATH中,为什么它找不到sybmol?
同样,当我使用正确的x11库路径设置LD_LIBRARY_PATH env变量时,测试正在通过。我也尝试使用-rdynamic选项进行动态加载,并在链接阶段保持正确的库路径排序,但没有用。