Я пытаюсь понять, как использовать статические библиотеки, но самый тривиальный пример терпит неудачу:
//foo.c
int func(int i) {
return i+1;
}
//main.c
int func(int i);
int main() {
return func(41);
}
Компиляция foo.c
и main.c
работает:
gcc -Wall -o foo.o -c foo.c
gcc -Wall -o main.o -c main.c
Архивация foo.o
также не жалуется:
ar rcs libfoo.a foo.o
Но соединение не удается с неопределенной ссылкой на func
:
ld libfoo.a main.o
ld -L. -lfoo main.o
, оба дают мне:
ld: warning: cannot find entry symbol _start; defaulting to 00000000004000b0
main.o: In function `main':
main.c:(.text+0xa): undefined reference to `func'
Я получаю аналогичную ошибку, если беру объезд по gcc
по ссылке:
gcc libfoo.a main.o
gcc -L. -lfoo main.o
и мне сообщают:
main.o: In function `main':
main.c:(.text+0xa): undefined reference to `func'
collect2: ld returned 1 exit status
Что я здесь не так делаю?В соответствии со всеми руководствами и поисковыми системами, которые я читал / использовал, это способ использовать статические библиотеки.
Редактировать: помните, что gcc foo.o main.o
работает отлично.