c++ - 使用外部 *.lib 文件进行 Qt 部署

标签 c++ qt visual-studio-2010 deployment

我需要帮助来部署带有附加库 (*.lib) 的 qt 应用程序。 我的项目是在 VS2010 + Qt5 中开发的,并在 LIB 目录中使用了一些第 3 方库(在其他 LIBrary 目录中使用 VS 项目设置指定)。 我搜索了正确的部署方式并找到了以下解决方案:

  1. 使用 windeployqt.exe 将所有必要的 qt dll 复制到部署中 目录。
  2. 确保用户已经安装了可再发行的 C++ 为他的平台打包。
  3. 复制所有资源和依赖项 进入调试配置中的结构。
  4. 添加库路径 在应用程序中:

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 激活函数,我试图在我能想象到的每个地方复制这个第 3 方库 - 根文件夹,LIB 文件夹(附加在 VS 属性中),从应用程序文件夹的更高级别 - 没有幸运。我也有使用外部 dll - 它放在应用程序可执行文件旁边。但它似乎可以工作。 在调试器中我有下一个错误: 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 中的 Debug模式一样开始工作?我如何“激活”已部署项目中的其他库?

更新:抱歉,问题不在 Libs 中。我很惊讶地发现 VS 中的程序可以没有库。我只使用 DLL 中的函数,没有额外的依赖项。 所有错误都来自 CRT (ntdll.dll) - 就像上面的字符串操作一样。正如我所想,这意味着我部署了错误版本的 MSVCRT100D.dll。我不知道,它必须与调试 dll 一起使用还是我只需要使用 MSVCRT100.dll(不调试)? 我还更改了项目版本以在程序启动时发布并捕获以下错误:enter image description here

在调试配置中它工作正常。但在发布中 - 函数 __tmainCRTStartup()/WinMain() 中的 vector 迭代器错误。

enter image description here

我该怎么做才能避免这些问题?

更新 2: 我忘记了要发布的重建 dll,但现在 msvcrt100.dll 中的释放 ~basic_string() 问题仍然存在。 从 VS 运行程序和通过双击运行程序有什么区别?(dll 使用 msvcp100.dll 和 msvcrt100.dll 静态构建)。从 VS 执行程序成功。没有字符串 dealloc 问题)

最佳答案

问题出在不同的 Qt 和程序库运行时。 basic_string 中的析构函数调用不同的运行时和程序已崩溃。 这是决定:crash on std::string destructor

关于c++ - 使用外部 *.lib 文件进行 Qt 部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38053454/

相关文章:

c++ - MSVCP110D.dll 和 Visual Studio 2013

c++ - 在许多 malloc/free 小块内存之后 malloc 大块内存失败

qt - 为什么我们应该总是从 Qt 中的基类派生?

c++ - qtcreator 安装问题无效编码

visual-studio - 为什么在尝试使用Visual Studio Analyzer时遇到错误?

c# - 即时窗口是否正在逐步取消?

c - 如何使用 "x = x++"之类的内容获取 VS 或 Xcode 警告?

c++ - 用于 std::list 指针排序算法的 STL 谓词

c++ - QImage 与 OpenGL 性能对比

c++ - 要下载哪个Qt?