静的 C ライブラリを C コードにリンクしようとすると、一般的に " 「未定義の参照」エラー。これらのエラーは、オブジェクト ファイルの順序やリンク フラグを調整した後でも発生します。ただし、同じライブラリを使用する他の C プログラムではこれらのエラーは発生しないため、この問題は C リンクに限定されます。
C と C コンパイルの主な違い名前のマングリングです。 C プログラマーは宣言どおりの関数名を自由に使用できますが、C では複数のソース ファイルをコンパイルするときに名前の競合を防ぐために関数、クラス、テンプレートの名前をマングルします。
静的 C ライブラリを C コードとリンクする場合、リンカーは参照として壊れたシンボル名を期待します。ただし、C ライブラリはマングルされていないシンボルを提供しており、「未定義の参照への参照」エラーが発生します。
これらのエラーを解決するには、extern "C" ブロックを次のようにします。特定のスコープでの C 名のマングリングを抑制するために使用され、C ライブラリと対話する関数宣言を囲みます。そうすることで、リンカーはマングルされていない参照を認識し、ライブラリを正常にリンクします。
もう 1 つの効果的なアプローチは、コンパイルが C かどうかに基づいて条件付きでコンパイルするプリプロセッサ ディレクティブを使用してヘッダー ファイルに関数宣言をラップすることです。 C.このアプローチにより、コンパイル コンテキストに応じて正しい関数名が使用されるようになります。
以上が静的 C ライブラリを C コードにリンクすると「未定義の参照への参照」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。