|
■No98284 (身すがら さん) に返信 > .cppと.cを混在させてビルドすると外部シンボルが未解決になります。 > 教えてください。 > > 【.cppのコード】 > // 前略 > extern int a, b, c; > extern void test(); > > 【.cのコード】 > int a, b, c; > > void test() > { > c = a + b; > } > > 【ビルド結果】 > 1>MFCApplication1Dlg.obj : error LNK2019: 未解決の外部シンボル "void __cdecl test(void)" (?test@@YAXXZ) が関数 "public: void __thiscall CMFCApplication1Dlg::OnBnClickedButtonStart(void)" (?OnBnClickedButtonStart@CMFCApplication1Dlg@@QAEXXZ) で参照されました。 > 1>MFCApplication1Dlg.obj : error LNK2001: 外部シンボル ""int a" (?a@@3HA)" は未解決です。 > 1>MFCApplication1Dlg.obj : error LNK2001: 外部シンボル ""int b" (?b@@3HA)" は未解決です。 > 1>MFCApplication1Dlg.obj : error LNK2001: 外部シンボル ""int c" (?c@@3HA)" は未解決です。
C++ の名前(コンパイラ内部の名前)と、Cの名前の命名規則が違うために発生しています。
.cpp 側を
extern "C" int a, b, c; extern "C" void test();
または、
extern "C" { int a, b, c; void test(); }
と C 形式の名前で参照するようにすることで、リンクできるようになります。 詳しくは「マングリング」で検索してください。
|