微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 64 位可执行文件和 64 位/32 位可执行文件的混合环境中传递 LD_PRELOAD=libX.so 的可靠方法

如何解决在 64 位可执行文件和 64 位/32 位可执行文件的混合环境中传递 LD_PRELOAD=libX.so 的可靠方法

我在加载 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 举报,一经查实,本站将立刻删除。