Почему я получаю неопределенную ссылку, когда -L и -l выглядят правильно

Я использую 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

Это кажется базовым, поэтому я уверен, что веду себя глупо и пропустил шаг — есть идеи, что я делаю неправильно?


person kmp    schedule 27.09.2016    source источник
comment
Поместите -lmylib после myapp.c в последнюю команду. Связывает по порядку без второго прохода по умолчанию   -  person M.M    schedule 27.09.2016
comment
Угу, СПАСИБО! Не могу поверить, что я этого не пробовал.   -  person kmp    schedule 27.09.2016
comment
stackoverflow.com/questions/11893996/   -  person AnT    schedule 27.09.2016