четверг, 26 марта 2009 г.

Либа, либушка ...

Как у начинающего unix-программиста, у меня возникают постоянные проблемы с подхватом динамических библиотек, во время компиляции\запуска программы.

тут мне помогают 3 волшебные команды:

1. ldd

Получает в качестве аргумента имя выполнимого файла или либы, показывает все зависимости. Особо интересны те напротив которох стоит not found (man)

2.  В случае если либу желаемую мы находим а подключить не можем:

nm -C имя_либы >> куда сохранить вывод 

(man)

Показывает все, что в этой либе есть.

Тут оно же --demangle обязательно, что бы увидеть пространства имен. 

В том, что вывела библиотека  ищем, то что не находится при линковки.  

3. Очень пригодилось  при сборке проекта для 32-х и 64-х  битных осей

file имя_либы_или_исполняемого_файла

отображает информацию о типе файла и в частности  для какой системы предназначен.

4. Еще бывает очень интересная ситуация, когда имя библиотеки является линком на другой файл, например: libstlport.so -> libstlport.so.5 а мы указываем это имя с полным путем (same_path/libstlport.so). Тогда, сам линк (libstlport.so) находится, а вот то на что он ссылается(libstlport.so.5)  нет.  В этой ситуации я нашла только один выход прописать его в $LD_LIBRARY_PATH. Вообще думаю стоит все туда прописывать. При этом не забывать, что при запуске могут открываться новые шелы и учитывать облость видемости $LD_LIBRARY_PATH в этом случае, и стоит ли ему делать export.

5.  И последнее: для нормальной работы  gdb он тоже должен уметь подгружать либы. Иногда бывает ситуация когда есть исполняемый файл с другой машины, корка от него. и набор либ. Но сами либы лежат не там где они были на момент создания корки. Тут всех спасет команда gdb 

set solib-search-path path

Вообще для работы  с либами у gdb есть ряд комманд http://mitya.pp.ru/gdb/gdb_13.html#SEC104

Кажется: это все :)

Комментариев нет:

Отправить комментарий

Моя фотография
http://aal.flamber.ru - мой фотоальбом