GCC C リンカー エラー: 仮想テーブルとコンストラクターへの未定義の参照
C では、仮想関数により、派生クラスがその関数で定義されたメソッドをオーバーライドできます。基本クラス。仮想関数を使用するプログラムをリンクする場合、リンカーはこれらのメソッドの定義がオブジェクト ファイルに存在することを必要とします。これらの定義を指定しないと、次のような未定義の参照エラーが発生します。
可能原因
これらのエラーは、次のようなさまざまな理由で発生する可能性があります。
静的ライブラリとクラスの可用性の確認
ライブラリ ビットネス: 静的ライブラリが 64 ビットかどうかを確認するには、次を使用します。ファイルコマンド:
file -L <library_path>
ライブラリが 64 ビットの場合、64 ビット x86-64 共有オブジェクトが表示されます。
クラスの可用性: objdump -t コマンドを使用して、ライブラリに特定のファイルが含まれているかどうかを確認します。 class:
objdump -t <library_path> | grep <class_name>
クラスが存在する場合、出力にリストされます。
問題例
提供されたエラー ログに示されているように、SomeClass::close() への未定義の参照は、クラスが使用されているものの定義されていないことを示しています。同様に、SomeClass::SomeClass() および SomeOtherClass の vtable への未定義の参照は、SomeOtherClass クラスのコンストラクターと仮想テーブルがオブジェクト ファイルで定義されていないことを示唆しています。
Solution
この問題を解決するには、すべての仮想関数が適切な子クラスで定義されていること、必要なヘッダー ファイルが含まれていること、および正しいライブラリが適切な子クラスにリンクされていることを確認してください。プログラム。
以上がGCC C で「仮想テーブルおよびコンストラクターへの未定義の参照」リンカー エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。