linux - 未使用機能のリンカーエラー:いつ発生しますか?

linux gcc linker build-process d

一部の機能が別の静的ライブラリlibbarに依存している静的ライブラリlibfooを想定します。これらと私のアプリケーションはDで記述されています。私のアプリケーションがlibfooのみを直接使用し、libbarからのシンボルを参照しないlibfooからの関数のみを呼び出す場合、プログラムはlibbarをリンカーに渡さずに正常にリンクし、それ以外の場合はリンクしません。

すべてのコンパイラーがGCCツールチェーンを使用してリンクしているにもかかわらず、これらのどちらが起こるかは、libfoo、libbar、および私のアプリケーションをコンパイルするために使用しているコンパイラーに依存しているようです。 DMDを使用している場合、libbarをリンカーに渡さないと、リンカーエラーが発生しません。 GDCを使用している場合、理由がわからないことがあります。 LDCを使用している場合は、常に使用します。

libfooで参照されているシンボルが定義されていないときにGCCリンカーが失敗するかどうかを決定するのは何ですか?しかし、このシンボルはアプリケーションオブジェクトファイルによって参照されていない関数で発生しますか?
答え
libfooで参照されているシンボルが定義されていないときにGCCリンカーが失敗するかどうかを決定するのは何ですか?しかし、このシンボルはアプリケーションオブジェクトファイルによって参照されていない関数で発生しますか?


リンカが未解決のシンボルについて不平を言った場合、そのシンボルはどこかから参照されています。

通常、リンカーは、未解決の参照がどのオブジェクトからのものかを通知しますが、そうでない場合は、-Wl,-y,unres_symbolが通知する必要があります。

また、全体がどのように機能するかについてのこのdescriptionを読むこともできます。
関連記事

php - JSP / Tomcatサポートを既存のLAMP Webサーバーに追加することは「OK」ですか?

java - Javaコードからbashコマンドを使用してLinuxディレクトリを書き込み可能にする

mysql - phpmyadminでインポートされたデータベースが小さいのはなぜですか?

c - オーバーフローコードが機能しない

linux - svn + sshでLDAPを使用するようにsvnを構成する

c++ - プログラムをEclipseのC++プロジェクトにリンクしていますか? Linux

database - データベースの破損[終了]

c - 共有オブジェクト(.so)と静的ライブラリ(.a)を新しい共有オブジェクトに結合するにはどうすればよいですか?

linux - IPアドレスへの同時接続数を増やす

linux - Unix CATを使用して新しい行を挿入して検索する方法