Я работаю над довольно крупным и грязным проектом, который у меня на самом деле не хватает времени для очистки, и мне было поручено предоставить API для него. То, что я пытаюсь сделать, это обернуть все уродливые вещи в одну статическую библиотеку, а затем предоставить ей один файл заголовка.Ссылка на статическую библиотеку, состоящую из нескольких библиотек и объектных файлов с использованием одного файла заголовка
Но при попытке создать исполняемый файл с использованием файла заголовка и библиотеки я получаю кучу ошибок «неопределенной ссылки». Я предполагаю, что это сработает, если я предоставил все файлы заголовков, но я действительно не хочу этого делать.
Сейчас makefile
выглядит (немного измененную для простоты), как это:
myprog.elf : libgiant_lib.a main.o
gcc -pg -o [email protected] main.o -lgiant_lib
main.o : main.c
gcc -c $(CFLAGS) $(SOME_INCLUDES) $< -o [email protected]
libgiant_lib.a : $(A_BUNCH_OF_LIBS) $(COUPLE_OF_OBJS) api.o
ar rcs [email protected] $^
api.o : api.c api.h
gcc -c $(CFLAGS) $(INCLUDES_FOR_BUNCH_OF_LIBS) $< -o [email protected]
Я проверил libgiant_lib.a
архив и, кажется, содержит все библиотеки и файлы, которые он протестует. Но все же связь с ним не работает.
Я довольно уверен, что я что-то очевидное здесь отсутствует ...
Итак, я решил только поместить объектные файлы в архив вместо этого, и теперь, кажется, работает как задумано. – user1986698