Проблема компиляции против статической библиотеки

Я создал статическую библиотеку, libstuff.a, с gcc а также ar, Я установил библиотеку в /custom/lib/dir/ и заголовочные файлы в /custom/include/dir/, Когда я пытаюсь скомпилировать другое приложение из архива, у меня возникают проблемы.

Приложение, которое я пытаюсь скомпилировать, в основном использует gcc -L/custom/lib/dir/ -I/custom/include/dir/ -lstuff,

Когда я пытаюсь скомпилировать, я получаю сообщение об ошибке, которую я объявляю в stuff.h и определить в stuff.c,

main.c:51: undefined reference to `stuff_init'
collect2: error: ld returned 1 exit status

Если я удалю libstuff.a от /custom/lib/dir/ компилятор жалуется /usr/bin/ld: cannot find -lstuff, Если я положу его обратно, он не будет жаловаться. Так что он находит архив правильно.

Если я уберу строку кода #include "stuff.h" от main.c GCC жалуется на stuff_init будучи неопределенным, поэтому он находит заголовки правильно.

Если я бегу nm libstuff.a, выход включает в себя 0000000000000000 T stuff_init, Итак, функция определена в файле архива.

Так что я делаю не так?

1 ответ

Решение

Вы не показываете точную линию линковки, но есть вероятность, что вы должны (но не) перечислить библиотеки после объектных файлов:

gcc -o program main.o -L/custom/lib/dir -lstuff

Если за пределами библиотек имеется более одного объектного файла, перечислите их все перед любой из библиотек. -L варианты могут идти куда угодно до -llib вариант, который использует библиотеку из данного каталога.

Другие вопросы по тегам