我正在使用Visual C ++ 2005 Express Edition并获得以下链接器错误:
19>mylib1.lib(mylibsource1.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall std::exception::_Raise(void)const " (__imp_?_Raise@exception@std@@QBEXXZ) referenced in function "protected: static void __cdecl std::vector<class mytype,class std::allocator<class mytype> >::_Xlen(void)" (?_Xlen@?$vector@Vmytype@@V?$allocator@Vmytype@@@std@@@std@@KAXXZ)
19>mylib2.lib(mylibsource2.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: void __thiscall std::exception::_Raise(void)const " (__imp_?_Raise@exception@std@@QBEXXZ)
19>mylib1.lib(mylibsource1.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall std::exception::exception(char const *,int)" (__imp_??0exception@std@@QAE@PBDH@Z) referenced in function "public: __thiscall std::logic_error::logic_error(class std::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)
19>mylib2.lib(mylibsource2.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::exception::exception(char const *,int)" (__imp_??0exception@std@@QAE@PBDH@Z)
我关闭了生成代码中的异常,我在使用包含矢量头文件之前使用了:
#define _HAS_EXCEPTIONS 0
一些谷歌搜索结果显示了一些东西,但没有“啊哈!”解决方案对我有用。
编辑:
如上所述,“_HAS_EXCEPTIONS 0”本身并未关闭异常。它的作用是,至少在向量头文件中,是在异常对象上调用_Raise而不是调用C ++“throw”。在我的情况下,它无法链接到异常对象的_Raise函数,因为我没有包含正确的库。然而,那个图书馆并不明显。
答案 0 :(得分:1)
添加以下行:
#define _STATIC_CPPLIB
在包含矢量标题之前,似乎可以解决问题。
答案 1 :(得分:0)
第三个错误表明#define the _HAS_EXCEPTIONS 0
不会影响。现在,可能包含(有意义,共享代码可能会减少可执行文件的大小)。这可以解释为什么在 包含之前定义它仍然会有错误。这种定义应该在您的项目设置中完成。
请注意,_HAS_EXCEPTIONS是Visual Studio中不受支持的功能。它不会因此而关闭异常。