Я пытаюсь скомпилировать двоичный файл, связывающий его со статической библиотекой libfoo.a:Неопределенная ссылка на символ на статическую библиотеке
gcc -L. -o myapp myapp.o -lfoo
Но я получаю следующее сообщение об ошибке от линкера:
libfoo.c:101: undefined reference to `_TRACE'
Проблема в том, что у меня нет исходного кода для библиотеки libfoo.a. Я пытался получить ссылку на _TRACE
символ в библиотеке, и я получил это:
nm libfoo.a | grep TRACE
U _TRACE
Предполагая, что _TRACE
не будет влиять на внутреннюю работу в libfoo.a
, можно получить компоновщик определить некоторое значение заполнителя для этот символ, чтобы я мог скомпилировать свой код?
Если 'intmax_t _TRACE = 0;' не работает, 'int _TRACE() {return (0); } 'как' _TRACE' может быть макросом, который не получил должным образом определённого значения, поэтому ему по умолчанию была указана неявно определенная функция, возвращающая 'int'. Я сомневаюсь, что когда-либо доверял бы такой библиотеке что-нибудь важное, однако, если такие махинации - это то, что нужно, чтобы заставить ее даже привязать. –
Моя первоначальная идея была чем-то похожей на '#define _TRACE' только для компиляции. Мое предположение заключается в том, что _TRACE - это функция, которая печатает отладочную информацию, поэтому местозаполнитель будет просто отлично. Я хотел бы знать, возможно ли это. –
@Gustavo - Вы компилируете 'libfoo.a', или у вас есть только статическая библиотека? –