Где Ubuntu ищет общие библиотеки?

16

Когда я запускаю процесс, который ссылается на общую библиотеку во время выполнения (связанный при запуске процесса, не связанный позже с dlload() ), где он ищет файл с общей библиотекой ( .so ), отличный от LD_LIBRARY_PATH ?

Фон:

У меня есть код C ++, который я написал, который использует определенную стороннюю библиотеку. Я установил библиотеку и скомпилировал свой код на двух разных платформах, как Ubuntu, так и разных версиях, а также разных версиях gcc. Библиотека была скомпилирована и установлена ​​из источника и находится в /usr/local/lib на обеих платформах. Когда я компилирую свой код, я связываюсь с параметрами pkg-config --libs для сторонней библиотеки, и я проверял, что pkg-config --libs возвращает то же самое на обеих платформах.

Мой код успешно компилируется на обеих платформах, а LD_LIBRARY_PATH не определено (или определено как empty: "" ) на обеих платформах. Однако, когда я запускаю его на одном платоформе, он отлично работает, а с другой - получаю эту ошибку:

error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory

Как ни странно, те, что не работает , это версия newer Ubuntu и gcc. : /

Итак, я пытаюсь понять, как рабочий может найти библиотеку, чтобы я мог сделать сломанную локализацию библиотеки таким же образом. (т. е. без установки LD_LIBRARY_PATH )

Update:

Вот мой вывод из 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
    
задан Dave Lillethun 25.09.2013 в 23:10
источник

1 ответ

17

Весь этот путь связан с чем-то, называемым multi-arch. В основном это позволит вам иметь 32-битную и 64-битную библиотеки в одной и той же системе.

После того, как вы скопировали файл, вам удалось запустить ldconfig?

ldconfig  creates,  updates,  and removes the necessary links and cache
       (for use by the run-time linker,  ld.so)  to  the  most  recent  shared
       libraries  found  in  the directories specified on the command line, in
       the file /etc/ld.so.conf, and in the trusted directories (/usr/lib  and
       /lib).   ldconfig  checks the header and file names of the libraries it
       encounters when determining which  versions  should  have  their  links
       updated.  ldconfig ignores symbolic links when scanning for libraries.
    
ответ дан Matt H 25.09.2013 в 23:42
источник