Embedded Visual C++ 4.0 + Pocket PC 2003 SDKでC++ exceptionを使うとLNK2001/LNK2019/LNK1120エラーが出る話は何度かしたが、ふと、Embedded Visual C++ 4.0付属のSTANDARDSDKではこのエラーがでないことに気が付いた。STANDARDSDKなど使わないから気がつかなかったよ。
で、問題のexceptionやらtype_infoやらが、どこに入っているのか調べてみました。なんとcoredll。
こんなエラーが出るわけですが、
main.obj : error LNK2001: unresolved external symbol "public: __thiscall std::exception::exception(class exception::exception const &)" (??0exception@std@@QAE@ABV01@@Z)
main.obj : error LNK2001: unresolved external symbol "const type_info::`vftable'" (??_7type_info@@6B@)
main.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall std::exception::~exception(void)" (??1exception@std@@UAE@XZ) referenced in function "public: virtual __thiscall std::logic_error::~logic_error(void)" (??1logic_error@std@@UAE@XZ)
main.obj : error LNK2019: unresolved external symbol "public: __thiscall std::exception::exception(char const *)" (??0exception@std@@QAE@PBD@Z) referenced in function "public: __thiscall std::logic_error::logic_error(class logic_error::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0logic_error@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z)
STANDARDSDKのcoredllをdumpbin出力:
Dump of file coredll.lib
1572 ??0exception@std@@QAE@ABV01@@Z (public: __thiscall std::exception::exception(class exception::exception const &))
1570 ??0exception@std@@QAE@XZ (public: __thiscall std::exception::exception(void))
1574 ??1exception@std@@UAE@XZ (public: virtual __thiscall std::exception::~exception(void))
1580 ??_7type_info@@6B@ (const type_info::`vftable')
なんでPocket PC 2003 SDKから、こいつらを外しちゃったんでしょうかねえ。