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