Вопрос о системе сборки GNU

Как найти библиотеку, которая содержит определение конкретной функции? Я получаю ошибку компоновщика.

6
задан unwind 30 June 2010 в 07:15
поделиться

3 ответа

Вы можете использовать инструмент командной строки nm для вывода списка экспортированных символов в двоичных файлах:

~/src> cat nm-test.c

static int plus_four(int x)
{
        return x + 4;
}

int sum_plus_four(int a, int b)
{
        return plus_four(a + b);
}

int product_plus_four(int a, int b)
{
        return plus_four(a * b);
}
~/src> gcc -c nm-test.c
~/src> nm ./nm-test.o
00000000 t plus_four
00000023 T product_plus_four
0000000b T sum_plus_four

Согласно руководству , «t» означает что символ находится в сегменте кода (текста), а верхний регистр означает, что он общедоступен.

Если у вас есть символ, который вы ищете, вы можете использовать nm , чтобы сделать символы, экспортируемые библиотекой, доступными, например grep:

$ find -name lib*.a /example/library/path | xargs nm | grep -E "T $SYMBOL_TO_FIND"

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

4
ответ дан 17 December 2019 в 02:21
поделиться

Если вы хотите узнать библиотеку непрограммным способом, вам может пригодиться LSB Navigator . Введите функцию в поле поиска и отметьте библиотеку в строке с зеленым «статусом».


(источник: coldattic.info )

Это будет «обычная» библиотека, содержащая функцию (в примере, изображенном выше, librt является правильной библиотекой для mq_unlink , поэтому вы создаете ссылку с помощью -lrt ). Просто подключитесь к этой библиотеке, и она будет работать практически во всех системах Linux.

Примечание: я был одним из разработчиков рекомендованного мною инструмента.

1
ответ дан 17 December 2019 в 02:21
поделиться

Если это часть API стандарта C, то просто запустите man, он должен четко указать, где определена функция.

1
ответ дан 17 December 2019 в 02:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: