Я создал статическую библиотеку 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
. Итак, функция определена в файле архива.
Так что я делаю неправильно?
àr(1)
, аlibfoo.a
является статической библиотекой. Проверьте инструкции по сборке. - person vonbrand   schedule 25.03.2014