LD_PRELOAD多个相互依赖的库

时间:2018-11-15 16:15:18

标签: shared-libraries ld dynamic-library ld-preload

我的库具有依赖关系树,即某些依赖项具有我要预加载的其他依赖项。我该怎么办?

NA

LD_PRELOAD \ /opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libicudata.so.60 \ /opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libicuuc.so.60 \ /opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libicui18n.so.60 \ /opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libQt5Core.so.5 \ MyApp 调用所包含的内容进行了排序,以便在依赖库之前列出依赖项。

链接器引发以下错误:

LD_PRELOAD

是否可以按正确的顺序预加载库以实现依赖关系?

1 个答案:

答案 0 :(得分:1)

此错误:

ld.so: object '/opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libQt5Core.so.5' \
from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

表示动态加载程序尝试打开该库并失败。

此失败的可能原因有以下几种:

  1. 该文件不存在(使用ls -L /opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libQt5Core.so.5确认存在
  2. 该文件用于错误的体系结构(例如MyApp为64位时为32位ELF,反之亦然)。使用file MyAppfile libQt5Core.so.5确认它们匹配。
  3. 还有别的。也许MyAppnewlibuClibc链接了,但是libQt5Core.so.5是用GLIBC构建的(反之亦然)。