Проблема компиляции против статической библиотеки
Я создал статическую библиотеку, 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
вариант, который использует библиотеку из данного каталога.