aws-lambda - 在 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 被忽略了。请让我知道你的想法。
谢谢
解决方案
推荐阅读
- php - 注意:未定义索引:is_popup
- rider - Rider IDE - Razor 页面 HTML 突出显示?
- java - 错误:com.android.builder.dexing.DexArchiveBuilderException: 无法处理 ...\.gradle\caches\modules-2\files-2.1\javaee\javaee-api\5\
- hibernate - 无法设置从 Servlet 检索的 JSP 页面中的值
- python - 合并两个不同的日期时间列以形成一个序列
- c++ - 如何应用使默认构造函数有条件地显式?
- css - 元素 UI el-collapse 在前面如果其他组件
- javascript - Android Pie (9.0) 中的 Ionic 4 应用程序登录问题
- scala - 如何在没有 ExecutionContext.global 和 IOApp 的情况下在猫效果中使用计时器?
- scala - 我可以使用类的类型注释来决定类方法的结果类型吗?