2

lib.a ファイルをいくつか作成しました

gcc -c file.c -o file.o

それから

ar sr lib/libtest.a file1.o file2.o file3.o

で確認

ar -t lib/libtest.a
file1.o
file2.o
file3.o

しかし、テストアプリケーションをコンパイルしようとすると

gcc lib/libtest.a test.c -o test

関数で未定義の参照を取得しましたmain: file1.o、file2.o、file3.o から使用された関数へ

4

1 に答える 1

6

ライブラリの順序は重要です - 試してください:

gcc test.c -o test lib/libtest.a 

基本的に、リンカーは、入力ファイルのリストでライブラリに遭遇するとライブラリを読み取り (これは正確には機能しない可能性がありますが、経験則としてはうまく機能すると思います)、まだ未定義の参照が残っている場合は解決します。次の入力に移るとき、途中で拾った新しい未解決の参照について、そのライブラリを再度参照することはありません。

(注: この動作を変更できる特定のリンカ オプションがありますが、それらはめったに使用されないようで、おそらく独自の欠点があるため、ここでは説明しません。この種の問題は通常、リンカの入力を並べ替えることで解決されます。ファイルリスト)。

于 2012-05-02T20:52:44.700 に答える