いくつかのライブラリを構築し、これらのライブラリと他のさまざまなシステムライブラリの通常のコレクションを使用していくつかのアプリケーションをコンパイルするclang++3.2を使用してUbuntu12.04で開発されたC++ソースツリーがあります。2つのパズル。クライアントは、clock_gettime()への未定義の参照でコードのビルドに失敗したと報告しています。案の定、ビルドロジック(scons)に必須の「-lrt」を含めませんでした。
最初のパズル:これは、「-lrt」をどこにも指定しなくても、システム上で文句なしに正しくコンパイル、リンク、実行されます。このシンボルはどのようにして正しく解決されますか?アプリケーションがそれ自体にlibrtを必要とするダイナミックライブラリにリンクしているためだと思いますが、これが発生する理由の背後にあるロジックがわかりません。
2番目のパズル:「-lrt」なしでclock_gettime()がどのように解決されるかについて十分な説明があるとすると、なぜこれが私のシステムで発生するのに、クライアントの非常によく似た設定では発生しないのでしょうか。
「...謎に包まれた謎に包まれた謎の中に」---ウィンストン・チャーチル
ここで実際に何が起こっているのかを明らかにするためのツールの提案は大歓迎です。