ホームページ > バックエンド開発 > C++ > 静的 C ライブラリを C コードにリンクすると「未定義の参照への参照」エラーが発生するのはなぜですか?

静的 C ライブラリを C コードにリンクすると「未定義の参照への参照」エラーが発生するのはなぜですか?

Patricia Arquette
リリース: 2024-12-07 09:54:13
オリジナル
589 人が閲覧しました

Why Do I Get

静的 C ライブラリを C コードにリンクする際の「未定義の参照への参照」エラーの処理

静的 C ライブラリを C コードにリンクしようとすると、一般的に " 「未定義の参照」エラー。これらのエラーは、オブジェクト ファイルの順序やリンク フラグを調整した後でも発生します。ただし、同じライブラリを使用する他の C プログラムではこれらのエラーは発生しないため、この問題は C リンクに限定されます。

根本原因: 名前のマングリング

C と C コンパイルの主な違い名前のマングリングです。 C プログラマーは宣言どおりの関数名を自由に使用できますが、C では複数のソース ファイルをコンパイルするときに名前の競合を防ぐために関数、クラス、テンプレートの名前をマングルします。

静的 C ライブラリを C コードとリンクする場合、リンカーは参照として壊れたシンボル名を期待します。ただし、C ライブラリはマングルされていないシンボルを提供しており、「未定義の参照への参照」エラーが発生します。

解決策: 名前マングルの抑制

これらのエラーを解決するには、extern "C" ブロックを次のようにします。特定のスコープでの C 名のマングリングを抑制するために使用され、C ライブラリと対話する関数宣言を囲みます。そうすることで、リンカーはマングルされていない参照を認識し、ライブラリを正常にリンクします。

もう 1 つの効果的なアプローチは、コンパイルが C かどうかに基づいて条件付きでコンパイルするプリプロセッサ ディレクティブを使用してヘッダー ファイルに関数宣言をラップすることです。 C.このアプローチにより、コンパイル コンテキストに応じて正しい関数名が使用されるようになります。

以上が静的 C ライブラリを C コードにリンクすると「未定義の参照への参照」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート