如何在 64 位 RHEL 上使用 32 位编译的共享对象 (.so) 文件?

如何在 64 位 RHEL 上使用 32 位编译的共享对象 (.so) 文件?

我的 RHEL 6.4 上的 32 位编译应用程序有一个共享对象文件 libfault.so。我想在启动应用程序时预加载此文件。我已将其放在 /usr/local/lib/ 目录中。

但是在启动应用程序时,我收到以下错误。

ERROR: ld.so: object 'libfault.so' from LD_PRELOAD cannot be preloaded: ignored.

但是,如果我以 64 位编译 libfault.so 并将其放置在 /usr/local/lib64/ 中,则不会收到错误。但该文件没有执行其预期功能,因为我的应用程序是 32 位编译的。

答案1

在查找要加载的库时,可以使用环境变量$LD_LIBRARY_PATH覆盖动态加载器的搜索路径。

要临时为单个应用程序执行此操作,您可以像这样调用它:

$ LD_LIBRARY_PATH=/usr/local/lib <your executable here>

您可以通过导出该变量来使您的 shell 实例的更改更加永久:

$ export LD_LIBRARY_PATH=/usr/local/lib

根据需要调整上面的路径,以适应 32 位的.so存储位置。

相关内容