2
我試圖找出如何使用靜態庫,但最簡單的例子將失敗:AR介紹未定義參考
//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
工作得很好。