Не удается найти общий объект в LD_LIBRARY_PATH (Amazon Linux) - PullRequest
0 голосов
/ 25 апреля 2020

У меня python время выполнения на aws лямбде. Так как существует известная проблема, что ghostscript не работает на aws lambda ami (в моем случае это amazon linux из-за python 3.7). Поэтому я собрал все, чего не хватает на ami, и сгруппировал его с пакетом. Следующим шагом было установить

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

Теперь, как я понимаю, dlopen на linux идет по порядку (не говоря об условиях) rpath -> ld_library_path - > runpath -> cache -> usr / lib et c. Так почему же он не может найти мой так.

Итак, чтобы проверить, я изменил имя библиотеки libgs.so на /tmp/project/ghostscript/libgs.so и загружается (из-за abs путь), но не удалось связать один из его необходимых с той же ошибкой.

Последние два шага от стороннего модуля, поэтому изменение его не является хорошим вариантом. Я думаю, что LD_LIBRARY_PATH игнорируется. Пожалуйста, дайте мне знать ваши мысли.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...