C プロジェクトの構成中に、リンカが「XXX の vtable への未定義の参照」または「未定義の参照」のような不可解なエラーをスローすることがあります。 ClassName::ClassName() に。」これらのエラーは主に、仮想関数と継承に起因する問題を示しています。
この問題は、子クラスが定義を提供せずにオーバーライドされた仮想関数を宣言した場合によく発生します。次のコード スニペットを考えてみましょう。
class Base { public: virtual void f() = 0; }; class Derived : public Base { public: void f(); };
この例では、子クラス Derived はオーバーライドされた関数 f() を宣言していますが、定義していません。この省略により、コンパイラは宣言を理解できますが、リンカは定義を見つけることができないため、リンカ エラーが発生します。
ライブラリを確認するアーキテクチャ: リンクしている静的ライブラリが 64 ビットであることを確認するには、ライブラリのドキュメントを参照するか、 file コマンドを使用してライブラリ ファイルを検査します:
file /path/to/library.a
クラスの存在を確認: ライブラリに予期したクラスとメソッドが含まれていることを確認するには、nm コマンドを使用します。 :
nm /path/to/library.a | grep SomeClass
リンカー エラーを解決してリンク プロセスを正常に完了するには、子クラスで宣言された仮想関数の定義を提供し、関連するライブラリがリンク ステップに適切に含まれていることを確認してください。
以上がC リンカーが「未定義参照」エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。