问题描述
我在加载 LD_preload 库时看到以下错误
ERROR: ld.so: object '/nobackup/sarvi/cel8root/${LIB}/libwisktrack.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
我有一个 LD_PRELOAD 库 libwisktrack.so。它已针对 32 位和 64 位进行了编译,组织方式如下
/usr/lib -> /usr/lib32
/usr/lib32/libwisktrack.so
/usr/lib64/libwisktrack.so
通过以下
LD_PREOAD=/usr/$LIB/libwisktrack.so ls -al
适用于为 32 位或 64 位构建的可执行二进制文件
bash-4.4$ file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB shared object,x86-64,version 1 (SYSV),dynamically linked,interpreter /lib64/ld-linux-x86-64.so.2,for GNU/Linux 3.2.0,BuildID[sha1]=937708964f0f7e3673465d7749d6cf6a2601dea2,stripped,too many notes (256)
但作为我们构建系统的一部分,我们有一些工具专门为 64 位编译到工作区中。它们是用自己的 ld-linux-x86-64.so.2 编译的,它似乎在 /usr/lib 中需要 64 位库
bash-4.4$ file /nobackup/sarvi/xewisktest/binos/linkfarm/x86_64_cge7/sysroot-host/usr/bin/pseudo
/nobackup/sarvi/xewisktest/binos/linkfarm/x86_64_cge7/sysroot-host/usr/bin/pseudo: ELF 64-bit LSB shared object,interpreter /nobackup/sarvi/xewisktest/binos/linkfarm/x86_64_cge7/sdk/sysroots/x86_64-xesdk-linux/lib/ld-linux-x86-64.so.2,BuildID[sha1]=b64aae37205ce835e321cb00191e65f53ef7adaa,for GNU/Linux 2.6.32,stripped
确保在这两种环境中加载正确的 libwisktrack.so 的最佳方法是什么?
另外,如果我设置
LD_PRELOAD=/usr/lib64/libwisktrack.so:/usr/lib32/libwisktrack.so
会不会有问题?我知道其中一个会出错。但是这个错误似乎并没有使系统失败
另外,如果我有两次相同的库,对于不同的位编译或相同的位编译,程序会被加载两次吗?
LD_PRELOAD=/usr/lib64/libwisktrack.so:/usr/lib32/libwisktrack.so
OR
LD_PRELOAD=/usr/lib32/libwisktrack.so:/usr/lib32/libwisktrack.so
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)