首页 > 解决方案 > 在 LD_LIBRARY_PATH (Amazon Linux) 中找不到共享对象

问题描述

我在 aws lambda 上有一个 python 运行时。正如已知的问题一样,ghostscript 在 aws lambda ami 上被破坏(在我的例子中,它是 amazon linux,因为 python 3.7)。所以我收集了 ami 上缺少的任何东西,并将其与 package 分组。下一步是设置

LD_LIBRARY_PATH = /tmp/project/ghostscript/

现在,当我跑步时

print(os.listdir(os.environ['LD_LIBRARY_PATH']))

我明白了

['libjbig.so.0', 'libpaper.so.1', 'libijs-0.35.so', 'libgs.so', 'libfreetype.so.6', 'libfontconfig.so.1', 'libtiff.so.5', 'libjbig2dec.so.0', 'libidn.so.11', 'libjpeg.so.8']

到目前为止一切顺利,现在当我手动执行

print(ctypes.util.find_library('gs'))

我明白了

'libgs.so'

看起来还是不错的。下一步是加载库所以

ctypes.cdll.LoadLibrary('libgs.so')

它打破了

OSError: libgs.so: cannot open shared object file: No such file or directory

现在,据我了解,Linux 上的 dlopen 按顺序排列(未提及条件) rpath -> ld_library_path -> runpath -> cache -> usr/lib 等。所以它为什么找不到我的。

因此,为了进行测试,我将 libgs.so 的 soname 更改为 /tmp/project/ghostscript/libgs.so 并加载(由于 abs 路径),但未能将其所需的其中一个链接到相同的错误。

最后两个步骤来自第三方模块,因此更改它不是一个好的选择。我认为 LD_LIBRARY_PATH 被忽略了。请让我知道你的想法。

谢谢

标签: aws-lambdalinkershared-librariesldd

解决方案


推荐阅读