我想将LD_PRELOAD设置为指向一个共享库,以便我可以运行64位或32位应用程序。显然,共享库和可执行文件的位数必须匹配。
$ LD_PRELOAD=/lib64/lib_init.so ./hello32
ERROR: ld.so: object '/lib64/lib_init.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS64): ignored
其中hello32是一个32位应用程序。世界上有些页面说我应该能够执行以下操作:
$ LD_PRELOAD='/$LIB/lib_init.so' ./hello32
ERROR: ld.so: object '/$LIB/lib_init.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored
$LIB将根据应用程序是32位还是64位自动在lib和lib64之间切换。但是很明显这不起作用。
有什么诀窍可以让它工作吗?LD_PRELOAD_32,LD_PRELOAD_64?谢谢!
$LIB
是来自于man ld.so
并搜索Rpath token expansion
。在链接时设置rpath时可以使用变量。而rpath是动态链接器在程序启动时查找库文件的位置。 - Zan Lynx