У меня есть два источника, которые я хотел бы объединить в одну статическую библиотеку C.Создание статической библиотеки в C
renderay_core.c
renderay_shapes.c
и соответствующие заголовочные файлы. Сначала я скомпилировал это как автономную (не библиотеку), чтобы избежать ошибок здесь.
test.c
#include <stdio.h>
#include "renderay_core.c"
#include "renderay_shapes.c"
int main(void){
Canvas* canvas = new_Canvas(5,5);
printf("Test");
}
скомпилирован с:
gcc test.c renderay_core.c renderay_shapes.c -o main.exe
и он работал отлично.
Теперь я собираюсь упаковать это в статическую библиотеку. Выполнение следующих действий:
gcc -c renderay_core.c renderay_shapes.c
Теперь у меня есть объекты, готовые для связи в виде библиотеки.
ar rcs librenderay.a renderay_core.c renderay_shapes.c
Это команда, которую я использую для этого. Затем я пытаюсь скомпилировать свой test.c с библиотекой вместо файлов с обычным исходным кодом.
gcc test.c -o main.exe -static -L -lrenderay
Теперь, когда я пытаюсь скомпилировать это я получаю предупреждение об ошибке:
неопределенная ссылка на «new_Canvas»
указал мне, что связывание с библиотекой не удалось. Что я здесь делаю неправильно? Что я пропустил?
Подробнее о заголовочных файлах. Не включайте файлы реализации. – Olaf
Вы, похоже, используете 'ar' вместо исходных файлов C, а не файлов объектов. –