Коли я запускаю процес, який посилається на спільну бібліотеку під час виконання (пов'язаний, коли процес починається, не пов’язаний пізніше dlload()
), де він шукає .so
інший файл спільної бібліотеки ( ) LD_LIBRARY_PATH
?
Фон:
У мене є якийсь код C ++, який я написав, який використовує певну сторонній бібліотеку. Я встановив бібліотеку і скомпілював свій код на двох різних платформах, як Ubuntu, але різні версії, так і різні версії gcc. Бібліотека була зібрана та встановлена з джерела та розташована /usr/local/lib
на обох платформах. Коли я компілюю свій код, я пов'язую з pkg-config --libs
параметрами для сторонньої бібліотеки, і я перевірив, що pkg-config --libs
повертає точно те саме на обох платформах.
Мій код успішно збирається на обох платформах і LD_LIBRARY_PATH
не визначається (або визначається як порожній:) ""
на обох платформах. Однак, коли я запускаю його на одній платформі, вона працює чудово, а з іншого я отримую цю помилку:
error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
Як не дивно, тим, що не працює, є новіша версія Ubuntu та gcc. : /
Тому я намагаюся розібратися, як робоча здатна знаходити бібліотеку, щоб я міг змусити зламану знайти бібліотеку таким же чином. (тобто без налаштування LD_LIBRARY_PATH
)
Оновлення:
Ось мій вихід із cat /etc/ld.so.conf.d/*
... про працюючу (старшу) систему:
/usr/lib/mesa
/usr/lib32/mesa
/usr/lib/alsa-lib
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
... про порушену (новішу) систему:
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/mesa
/usr/local/lib/libthrift-0.9.0.so
але все-таки він видає помилку error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
... Чи є причина, з якої він не підбиратиме каталог /etc/ld.so.conf.d/*.conf
?
sudo ldconfig -v
як запропоновано нижче. Якщо це все ще не працює, оновіть своє запитання на виході ldd /path/to/your/application
.
/etc/ld.so.conf.d/*.conf
, але я не впевнений у цьому.