URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8455
[ Назад ]

Исходное сообщение
"как определить какой библиотеке принадлежит функция."

Отправлено jl , 01-Окт-09 00:45 
Добрый день.
Подскажите новичку.
Имеем прогу на С.
#include <stdio.h>
#include <ещё много всего>
......
Далее по тексту встречаю например функцию subnmrx_by_ss().
...
subnmrx_by_ss(buffer,1024);
...
Вопрос: какой лучший способ узнать из какой библиотеки эта функция? Я конечно могу сделать что-то вроде grep -R func_name ../libs/*. Но может быть есть вариант лучше? Может есть готовая утилитка, к-ая мне красиво напечатает обо всех включенных изве переменных/функциях/и т.д.
Другими словами хочется как можно быстрее понять откуда что-то взято в программе(к-ую кто-то писал несколько лет и она обросла за это время библиотеками и т.п.).
Заранее спасибо!

Содержание

Сообщения в этом обсуждении
"как определить какой библиотеке принадлежит функция."
Отправлено Артур , 01-Окт-09 15:03 
если очень грубо, то когда в исходнике используется к-л внешняя библиотечная функция, можно узнать только три вещи: 1. что она внешняя, 2. что она используется, 3. в каком заголовочном файле (.h) она определена.

состав библиотек, используемых для проекта можно найти в makefile (если таковой есть). они будут указаны либо явно -- libfoo.a, либо неявно в виде ключей вида -lfoo. собрать все экспортируемые имена из библиотеки можно с помощью nm(1).

если же речь идет о том, в каком заголовочном файле имеется определение искомой функции, то наверное проще грепом пройтись по директориям, в которых смотрит компилятор. список таких мест тоже в makefile (ну и плюс /usr/include).

все сильно зависит от структуры проекта, больше инфы - точнее ответ.


"nm и таги"
Отправлено Вова , 01-Окт-09 17:50 
>Вопрос: какой лучший способ узнать из какой библиотеки эта функция? Я конечно
>могу сделать что-то вроде grep -R func_name ../libs/*. Но может быть
>есть вариант лучше? Может есть готовая утилитка, к-ая мне красиво напечатает
>обо всех включенных изве переменных/функциях/и т.д.

есть nm, но она не всегда сможет помочь,

>Другими словами хочется как можно быстрее понять откуда что-то взято в программе(к-ую
>кто-то писал несколько лет и она обросла за это время библиотеками
>и т.п.).

выполни ctags -R директория_исходников заголовков  далее в виме set tags=tags и потом контрол+5 g по именам функций


"nm и таги"
Отправлено Slavaz , 01-Окт-09 18:05 
>выполни ctags -R директория_исходников заголовков  далее в виме set tags=tags и
>потом контрол+5 g по именам функций

Дополню :)

http://midnight-commander.org/wiki/doc/editor/codejump


"nm и таги"
Отправлено jl , 03-Окт-09 00:52 
>>выполни ctags -R директория_исходников заголовков  далее в виме set tags=tags и
>>потом контрол+5 g по именам функций
>
>Дополню :)
>
>http://midnight-commander.org/wiki/doc/editor/codejump

Спасибо всем! vim+ctags - это вещь!!!!!!! то о чем я мечтал. особенно :TlistOpen.
PS а в midnight'е не получилось у меня.. я его особо и не пользую, но всё же хотелось бы знать как заставить перейти его к нужной функции/переменной. по ссылке сказано "For jump to definition (find tag) you need position cursor at end of the word and press M-Enter". M - это как я понимаю Esc или Alt. Не работает.....


"nm и таги"
Отправлено Slavaz , 03-Окт-09 01:19 
>PS а в midnight'е не получилось у меня.. я его особо и

Версия должна быть >= 4.7.0-pre1

>не пользую, но всё же хотелось бы знать как заставить перейти
>его к нужной функции/переменной. по ссылке сказано "For jump to definition
>(find tag) you need position cursor at end of the word
>and press M-Enter". M - это как я понимаю Esc или
>Alt. Не работает.....

Да, оно. Должно работать. Версию проверьте.


"nm и таги"
Отправлено jl , 03-Окт-09 02:28 
>[оверквотинг удален]
>
>Версия должна быть >= 4.7.0-pre1
>
>>не пользую, но всё же хотелось бы знать как заставить перейти
>>его к нужной функции/переменной. по ссылке сказано "For jump to definition
>>(find tag) you need position cursor at end of the word
>>and press M-Enter". M - это как я понимаю Esc или
>>Alt. Не работает.....
>
>Да, оно. Должно работать. Версию проверьте.

Спасибо!