静的 C ライブラリを C コードとリンクするときに発生する「未定義の参照」エラーを解決するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-10-23 14:53:32
オリジナル
206 人が閲覧しました

How to Resolve

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

静的 C ライブラリを C コードとリンクしようとすると、リンク順序を変更したにもかかわらず、「未定義の参照」エラーが発生します。この問題は、「名前マングリング」として知られる、C と C のコンパイルによって作成された異なるシンボル名によって発生します。

C では、リンカーはエラー メッセージにデマングルされたシンボル名を表示するため、混乱を招く可能性があります。 「nm -u」を使用してオブジェクト ファイル (*.o) を検査すると、参照されているシンボル名がライブラリ内のシンボル名と一致しないことがわかります。

この問題を解決するには、関数を外部としてリンクし、 C コンパイラでは、関数宣言を「extern "C" {}」ブロックで囲む必要があります。これにより、ブロック内のすべての C 名のマングリングが抑制されます。

例:

<code class="cpp">extern "C" {
    #include <dual/xalloc.h>
    #include <dual/xmalloc.h>
}</code>
ログイン後にコピー

または、次のようにヘッダー ファイルで関数宣言をラップすることもできます。

<code class="cpp">#if defined (__cplusplus)
extern "C" {
#endif

/*
 * Put plain C function declarations here ...
 */

#if defined (__cplusplus)
}
#endif</code>
ログイン後にコピー

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

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!