Я использую MinGW на компьютере с Windows 8.1 и пытаюсь сослаться на статическую библиотеку. Как бы я ни старался, я получаю ошибку неопределенной ссылки.
Обычно это просто случай правильной передачи флагов -L
и -l
, но вот что я делаю...
У меня есть следующая структура каталогов:
myapp.c
mylib
mylib.c
mylib.h
mylib/mylib.c
#include <stdio.h>
void do_something_amazing(void) {
printf("Woah\n");
}
mylib/mylib.h
void do_something_amazing(void);
myapp.c
#include "mylib/mylib.h"
int main() {
do_something_amazing();
return (0);
}
Я запускаю следующие команды, чтобы сначала создать статическую библиотеку libmylib
, а затем построить myapp
, которая на нее ссылается:
gcc -c -o mylib/mylib.o mylib/mylib.c
ar rcs mylib/libmylib.a mylib/mylib.o
gcc -Lmylib -lmylib myapp.c
И последний заканчивается с этой ошибкой:
cchqpYVl.o:myapp.c:(.text+0xc): undefined reference to `do_something_amazing'
collect2.exe: error: ld returned 1 exit status
Это кажется базовым, поэтому я уверен, что веду себя глупо и пропустил шаг — есть идеи, что я делаю неправильно?
-lmylib
послеmyapp.c
в последнюю команду. Связывает по порядку без второго прохода по умолчанию - person M.M   schedule 27.09.2016