Когда я запускаю процесс, который связывается с общей библиотекой во время выполнения (связанный, когда процесс запускается, а не связанный позже 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
, но я не уверен в этом.