2017-03-25 4 views
3

私はそう、私はそれにリンクされたライブラリを見てみたかった
int main() {return 0;}
prova.c、簡単なCプログラムを書いた:なぜいくつかのライブラリを開くことができませんでしたか?

  • 私はgcc -m32 -Wl,--verbose prova.o -o provaそれをリンクさgcc -Wall -m32 -stdc=99 -c prova.c -o prova.o
  • でそれをコンパイル

今、私は私のstadard出力を調べると、いくつかのライブラリが開かれなかったことに気付きました。
なぜこれが起こりますか?彼らはなぜ開こうとしたのですか?なぜそれは失敗するのですか?

attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib32/crt1.o succeeded 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib32/crt1.o 
attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib32/crti.o succeeded 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib32/crti.o 
attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/32/crtbegin.o succeeded 
/usr/lib/gcc/x86_64-linux-gnu/4.8/32/crtbegin.o 
attempt to open prova.o succeeded 
prova.o 
attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/32/libgcc.so failed 
attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/32/libgcc.a succeeded 
attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/32/libgcc_s.so succeeded 
+0

"なぜ彼らは開いていないとリンクしているのですか?"ではない。 '-lgcc'を見ると、リンカはlibgcc.soでそれを満足しようとします。失敗すると、次にlibgcc.aを試みます。 –

+0

@MarcGlisseこれは答えになるはずです。 – yugr

+0

こんにちは、私を助けてくれてありがとう!質問を編集して、私が何を求めようとしたのかがより明確になるようにしました。私が尋ねた疑問ははっきりしていなかった。 –

答えて

2

コンパイルコマンドには、シャドウ-lgcc -lcのコンパイラドライバによって追加されたシャドウがあります。このフラグは、libgccとlibcが見つかる場所をリンカーに正確に知らせるものではなく、静的か共有かを指定するものでもありません。したがって、リンカーはさまざまなディレクトリ(コンパイラから-Lまたはリンカースクリプトを介して渡されます)でそれらを繰り返し検索しようとします。既定では、リンカーはまずライブラリの共有バージョン(.so)、静的バージョン(.a)をリンクしようとします。

attempt to open ... failedと表示されている警告は、実際のエラーではなく、必要なライブラリを検索する際のリンカの進捗状況に関する診断メッセージです。

関連する問題