静的ライブラリの使用方法を理解しようとしていますが、最も簡単な例は失敗します。
//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
編集:完全にうまく機能する心。