我已经下载了第三方库,并在'release'模式下构建了.lib文件.将lib添加到我的项目后,如果我在发布模式下运行我的项目,那很好.但如果我在调试模式下运行我的项目,我会收到一个错误:
_iterator_debug_level value '0' doesn't match value '2;
Run Code Online (Sandbox Code Playgroud)
我可以在调试模式下重建库,但我不认为我需要调试库本身?我已经下载了预先构建的第三方库,之前只有一个版本构建(我假设?),无论我的项目是在调试还是发布,它都能很好地链接.我想知道如何做到这一点.
我正在使用Visual C++ 2008,SP1.我在调试构建配置中有一个QT应用程序(gui,.exe).它设置为使用CRT的多线程调试DLL版本,即MSVCRTD.lib.
我正在链接第三方库,该库是在发布模式下构建的,并使用CRT的多线程DLL(非调试)版本,即MSVCRT.lib.
它链接并运行但在启动时崩溃.在链接时我收到警告:
链接:警告LNK4098:defaultlib'MSVCRT'与使用其他库冲突; 使用/ NODEFAULTLIB:库
我尝试设置/NODEFAULTLIB:msvcrt.lib
但由于缺少符号,导致5个链接错误.
所以不可能使用两个不同的库吗?有什么选择?我可以从我拥有的第三方库中创建一个DLL吗?或者这是第三方必须做的事情?
启动时的例外是:
"在MyApp.exe中......处理未处理的异常:......访问冲突读取位置0x00000000f"
以下是应用程序运行后的调用堆栈,它崩溃了:
MyApp.exe!std::_Aux_cont::_Getcont() + 0xa bytes C++
MyApp.exe!std::_Iterator_base_aux::_Getmycont() + 0x1b bytes C++
MyApp.exe!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned int,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,unsigned int> >,0> >::const_iterator::operator*() + 0x28 bytes C++
MyApp.exe!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned int,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,unsigned int> >,0> >::iterator::operator*() + 0xf bytes C++
MyApp.exe!std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned int,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,unsigned int> > >::operator[]() + 0xe9 bytes C++
MyApp.exe!ThirdPartyLib::client::`anonymous namespace'::init_xlt_mode() + 0x5f bytes C++
MyApp.exe!_GetCommandLineW@0() + 0x8d8f3 bytes C++ …Run Code Online (Sandbox Code Playgroud)