2

私はこれをGoogleで少し検索しており、StackOverFlowに関するいくつかのトピックもありますが、主な質問には答えていません.なぜ、LinuxのGCCの下で(MinGWでは起こらないのでLinuxを意味します)同じコード)、アプリケーションはエラーなしで他のライブラリと正しくコンパイルおよびリンクされ、実行時に未定義のシンボルがスローされますか?

コンパイル/リンク時にこの未定義シンボルがスローされなかったのはなぜですか?

そのような関数が定義されていないにもかかわらず、リンカーがライブラリとコードを受け入れる理由は何ですか? 実行時にのみこの問題が検出されるのはなぜですか?

編集:

たとえば、クラス A のヘッダー ファイルにメソッド play() がありますが、A::play() を実装したことはありません。A::play() が実装されていないため、クラス A が定義されている初期ライブラリにリンクする別のプロジェクト ファイルからこの関数を呼び出すと、未定義のシンボル エラーが発生するはずがありません。その後、実行時にアプリケーションがライブラリの明示的なロードでクラッシュし、たとえば「未定義のシンボル再生」というエラー文字列が表示されます。かなり奇妙...

4

0 に答える 0