У меня есть инструмент, который не может быть запущен под моим Desktop Linux. Поэтому я хотел бы создать папку, содержащую все его требования, и запустить его в этой папке. Виртуальная машина или контейнер здесь не являются решением по какой-то причине.
Я загрузил Ubuntu Trusty в /data/LTS
, и установил все необходимое для инструмента, запустив chroot-окружение в /data/LTS
.
Теперь я выдаю:
PATH=/data/LTS/usr/local/sbin:/data/LTS/usr/local/bin:/data/LTS/usr/sbin:/data/LTS/usr/bin:/data/LTS/sbin:/data/LTS/bin \
LD_LIBRARY_PATH=/data/LTS/usr/local/lib:/data/LTS/usr/lib/x86_64-linux-gnu:/data/LTS/usr/lib:/data/LTS/lib/x86_64-linux-gnu:/data/LTS/lib \
PYTHONHOME=/data/LTS/usr \
/data/LTS/usr/bin/python /tmp/test.py
Я получил:
Несоответствие обнаружено ld.so: dl-close.c: 759: _dl_close: Утверждение `map->l_init_called' не выполнено!
Что я должен делать?
решение1
Похоже, проблема с загрузчиком. То есть вы используете загрузчик из внешней среды.
Попробуйте добавить к команде префикс /data/LTS/lib/ld.so или ld-XYso. Это загрузчик, и, сделав это, вы будете использовать загрузчик из прилагаемой системы.
решение2
Причина найдена. Это из-за абсолютного пути к ld.so. Без дальнейших изменений /data/LTS/usr/bin/python будет использовать ld.so из реальной системы вместо поддельной среды.
/data/LTS/lib/ld.so /data/LTS/usr/bin/python /tmp/test.py
работает.