C/C++混在環境において 「no definition for “xxx”」などの関数定義が存在しないエラーが発生してリンクに失敗する。
チェックポイント
『 マングル (mangle) 』, 『 名前マングリング (name mangling) 』
解決方法
解決方法は以下の (1) ~ (3) のいずれか。もしくは (1) ~ (3) の組み合わせ。
(1) ヘッダファイルを extern "C" リンケージ指定子で囲む
foo.h
#ifdef __cplusplus でスイッチすることで、C++ソースファイル(*.cpp)からインクルードされたときだけ、名前マングリングが有効となる。(C, C++兼用のヘッダファイルとなる。)
(2) C++ソースファイルの中にインクルード文を記述するときに extern "C" リンケージ指定子で囲む
bar.cpp
リンケージ指定の記述がないヘッダファイル(C言語専用ソースファイル)を、C++ソースファイル(*.cpp)からインクルードする工夫。