C++: undefined reference to
C++リンク時に関数やシンボルが見つからない場合のエラー
概要
C++のリンク時に、宣言された関数やシンボルの定義が見つからない場合に発生するエラーです。
エラーメッセージ
undefined reference to `functionName()'
または
undefined reference to `ClassName::methodName()'
原因
- 関数の定義がない: 宣言のみで実装がない
- ライブラリのリンク忘れ: 必要なライブラリを指定していない
- オブジェクトファイルの不足: コンパイルしたファイルをリンクしていない
- 名前修飾の不一致: C/C++の名前修飾の違い
解決策
1. 関数の定義を確認
| |
2. すべてのソースファイルをコンパイル
| |
3. ライブラリをリンク
| |
4. extern “C” を使用(C関数呼び出し時)
| |
5. テンプレートの実装をヘッダに
| |
6. 静的メンバ変数の定義
| |
7. CMakeLists.txt でライブラリ追加
| |
8. nm コマンドで確認
| |
よくある間違い
- ヘッダファイルにインクルードガードがない(重複定義)
- 仮想関数の実装を忘れている
- リンク順序が間違っている(依存関係のあるライブラリは後に指定)
- constexpr関数の定義がヘッダにない
C++ の他のエラー
この記事は役に立ちましたか?