我需要帮助部署qt应用程序和其他库(* .lib)。 我的项目是在VS2010 + Qt5中开发的,并在LIB目录中使用了一些第三方库(在其他LIBrary目录中使用VS项目设置指定)。 我搜索了正确的部署方法,并找到了以下解决方案:
QStringList paths = QCoreApplication :: libraryPaths(); // \ n
paths.append(".");
paths.append("imageformats");
paths.append("platforms");
paths.append("sqldrivers");
paths.append("LIB"); // all *.lib `s there
QApplication::setLibraryPaths(paths);
完成此步骤后,我的应用程序成功启动,但是当我开始使用外部库中的代码时,程序崩溃了! (激活来自* lib s)
I
的函数试图在我可以想象的每个地方复制这个第三方库 - 根文件夹,LIB文件夹(附加在VS属性中),在应用程序文件夹的更高级别 - 没有幸运。我使用外部DLL - 它放在app可执行文件的旁边。但它似乎有效。
在调试器中我有下一个错误:
在ntdll.dll中崩溃
CAtlString str = currentFolder->whatsThis().toStdWString().c_str();
// std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::_Tidy(bool _Built, unsigned __int64 _Newsize) Line 1998 C++
// std::allocator<wchar_t>::deallocate(wchar_t * _Ptr, unsigned __int64 __formal) Line 183 C++
让我的应用程序在VS2010中以调试模式开始工作需要什么?我怎样才能激活&#34;部署项目中的其他库?
更新:对不起,伙伴们,但问题不在Libs。我惊讶地发现VS中的程序没有 libs。我只使用DLL中的函数,没有额外的依赖。 所有错误都来自CRT(ntdll.dll) - 就像上面的字符串操作一样。我认为,这意味着我已经部署了错误版本的MSVCRT100D.dll。我不知道,它是否适用于调试DLL或我只需要使用MSVCRT100.dll(不调试)? 此外,我已将项目版本更改为发布,并在程序启动时捕获以下错误:
在调试配置中,它可以正常工作。但是在发布中 - 函数__tmainCRTStartup()/ WinMain()中的向量迭代器错误。
我该怎么做才能避免这些问题?
更新2:我忘记了重建dll要发布,但现在msvcrt100.dll中的deallocation~basic_string()问题仍然存在。 从VS运行程序与双击运行有什么区别?(dll使用msvcp100.dll和msvcrt100.dll静态构建)。 VS的程序执行成功。没有字符串dealloc问题)
答案 0 :(得分:0)
问题在于不同的Qt和程序库运行时。 basic_string中的析构函数调用不同的运行时和程序已经崩溃。 这是决定:crash on std::string destructor