【问题标题】:Qt deployment; the procedure entry point ... could not be locatedQt部署;程序入口点...无法定位
【发布时间】:2014-01-29 08:59:20
【问题描述】:

我已经移植了一个现有的 Qt4 应用程序 Qt5 并向这个应用程序添加了一些额外的(简单的)功能。

旧版应用自带

  • libgcc_s_dw2_1.dll
  • libusb-1.0.dll
  • mingwm10.dll
  • QtCore4.dll
  • QtCored4.dll
  • QtGui.dll

现在,我可以通过 QtCreator 运行修改后的应用程序,但在准备部署时会出现问题。我在我的.exe 上使用了dependancy walker,并在我的可执行文件目录中包含了一些DLL。

  • icudt51.dll
  • icuin51.dll
  • icuuc51.dll
  • IEShims.dll
  • libgcc_s_dw2-1.dll
  • libGLESv2.dll
  • libstdc++-6.dll
  • libusb-1.0.dll
  • libwinpthread-1.dll
  • mingwm10.dll
  • Qt5Core.dll
  • Qt5Cored.dll
  • Qt5Gui.dll
  • Qt5Guid.dll
  • Qt5Widgets.dll
  • Qt5Widgetsd.dll
  • QtCored4.dll

(是的,由于 DLL 的原因,项目现在非常大,但在我的用例中这不是问题。)

最后它没有抱怨缺少 DLL。尝试执行 .exe 时发布的错误消息是:

程序入口点?testBit@QBitArray@@QBE_NH@Z在动态链接库Qt5Core.dll中找不到

我从未尝试在 Qt Creator 之外执行 Qt 应用程序,所以我真的不知道该怎么做。

如果有帮助: 在 Projects-> qmake build config 下:Release -> Effective qmake call I have

qmake.exe D:\Product\test_util.pro -r -spec win32-g++

如果需要更多信息以使任何事情更清楚,请发表评论。

【问题讨论】:

  • 您包括 Qt dll 的调试和发布版本。但是,您只能拥有其中之一,具体取决于您的配置。这将减少您的包裹尺寸。
  • @vahancho 哦,这就是d 后缀的含义。谢谢
  • 您确定 DLL 版本与正在构建的二进制文件匹配吗?即 Qt 5 和 Qt 5.1 有不同的 dll。
  • @returnthis.lau_ 我使用 Qt 安装中的 DLL,即 Qt5.2
  • 原因 #233 讨厌 QT LOL,这是一个无法构建分发应用程序的 ide:D

标签: qt dll deployment


【解决方案1】:

在稍微修改我的代码以根据 OpenGL 添加新功能后,我在 Qt 5.4.2 上遇到了同样的问题。我所做的是使用Qt's Window's Deployment tool

  1. 创建一个文件夹并将您的二进制文件放入其中
  2. 使用 cmd 发出以下命令,具体取决于您拥有的二进制版本:
    • windeployqt --release Name_Of_Binary
    • windeployqt --debug Name_Of_Binary

根据您拥有的 Qt Creator 版本,您可能需要手动将 lib*.dll 复制到目录中。此错误在 Qt 5.4.2 中不存在,但在早期版本中存在。

【讨论】:

    猜你喜欢
    • 2014-12-21
    • 2016-01-20
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多