【问题标题】:How to make .exe from Qt with OpenCV如何使用 OpenCV 从 Qt 制作 .exe
【发布时间】:2016-12-01 18:17:32
【问题描述】:

我有使用了一些 OpenCV 的 QtProject,我想从中制作 .exe 以在其他计算机上运行它。

windeployqt.exe 即使对于 Qt 库也无法做到这一点,但如果我手动复制库,Qt 就可以工作。但是,我不知道如何让 OpenCV 工作。 我的 .pro 文件如下所示。

#-------------------------------------------------
#
# Project created by QtCreator ...
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = name01
TEMPLATE = app

INCLUDEPATH += C:/opencv-qt/install/include
LIBS += -L"C:/opencv-qt/install/x86/mingw/bin"
LIBS += -lopencv_core310 -lopencv_highgui310 -lopencv_imgproc310 -lopencv_imgcodecs310

SOURCES += main.cpp\
        widget.cpp

HEADERS  += widget.h

FORMS    += widget.ui

在这种情况下,当我尝试运行 .exe 时,它​​说我的计算机中缺少 libopencv_imgcodecs310。 我想我必须改变路径,所以我尝试了这个:

INCLUDEPATH += /include
LIBS += -L"/bin"
LIBS += -lopencv_core310 -lopencv_highgui310 -lopencv_imgproc310 -lopencv_imgcodecs310

并将 bin 和 include 文件夹复制到项目中。但它甚至没有编译错误消息

cannot find -lopencv_core310
cannot find -lopencv_highgui310
cannot find -lopencv_imgproc310
cannot find -lopencv_imgcodecs310

我在其他论坛上发现了一些关于它的问题,但没有得到解答。

我没有时间,所以我现在回过头来解决这个问题。 Qt 5.8 发布了,应该没问题,但是我的应用程序变大了,现在 .pro 看起来像这样:

#-------------------------------------------------
#
# Project created by QtCreator ...
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport

TARGET = name01
TEMPLATE = app

INCLUDEPATH += C:/opencv-qt/install/include
LIBS += -L"C:/opencv-qt/install/x86/mingw/bin"
LIBS += -lopencv_core310 -lopencv_highgui310 -lopencv_imgproc310 -lopencv_imgcodecs310

SOURCES += main.cpp\
        widget.cpp\
        qcustomplot.cpp

HEADERS  += widget.h
        qcustomplot.h

FORMS    += widget.ui

所以现在它甚至在我的电脑上也无法正常工作。 如果我尝试运行 .exe,它会说:

the procedure entry point __gxx_personality_v0 could not be located
in the dynamic link library libstdc++-6.dll

我也试过 Dependency Walker,它只是说它找不到 libopencv_imgprocs310.dll、libopencv_core310.dll 和 libopencv_imgcodecs310.dll,即使它们与 .exe 在同一个文件夹中。


我不知道我现在应该如何处理这个问题,或者我是否应该提出一个新问题,对于任何困难,我深表歉意。

【问题讨论】:

  • / 开头的路径是绝对路径。你确定你在根文件夹上有正确的bininclude 目录吗?或者你的意思是(例如)$$PWD/bin$$PWD/include
  • 谢谢,我不知道这意味着绝对路径。但是,当我使用 $$PWD/include 或仅使用 include 时,结果相同
  • 很久之后我又回到了这个问题,我不知道我现在应该如何管理这个问题或者我是否应该提出一个新问题,所以我改变了问题。如有任何困难,请见谅。

标签: c++ qt opencv deployment


【解决方案1】:

当您的 OpenCV 库文件仍在 C:/opencv-qt/install/x86/mingw/bin 并且您的代码已编译时,请尝试将您的代码使用的 .dll 文件复制到包含您的 exe 文件的文件夹中。或者将 C:/opencv-qt/install/x86/mingw/bin 添加到您的环境变量中。

【讨论】:

  • 是的,将 .dll 复制到项目文件夹中适用于我的计算机,但不适用于其他计算机。
  • 您是想在其他计算机上构建相同的项目,还是只是将 exe 文件复制到其他计算机并在那里运行?当你运行exe文件时,不管是哪台电脑,它都会搜索动态链接的库。加载 exe 的目录是它首先要查找的目录。试着把你的opencv dll放在那里。你的项目文件夹不一定是exe所在的文件夹。
  • 在我的电脑上运行没问题,我想在其他电脑上运行那个.exe。即使我将 .dll 复制到与 .exe 相同的文件夹中,qt 运行良好,但 OpenCV 函数根本什么都不做。
  • 所以你的 exe 现在可以运行而不会出现缺少 dll 的问题,但是预期的 OpenCV 功能不起作用?
  • 没错,我什至尝试将dll添加到其他计算机上的路径,但它仍然是一样的
【解决方案2】:

您的编译器对.lib 文件感兴趣,因此您应该添加包含lib 文件而不是dll 的文件夹。执行期间需要 Dll,因此您应该将它们复制到您的部署中。

我在 windows 下的样板 OpenCV 部分看起来像这样(注意我喜欢使用 opencv_world 而不是单独的模块)

win32 {
  OPENCVFOLDER = D:/_CODE_/_EXTERNAL_/OpenCV/my_git_build/
  OPENCVVERSION = 310
  INCLUDEPATH += $${OPENCVFOLDER}/x64/install/include

  CONFIG(release, debug|release) {
      LIBS += -L$${OPENCVFOLDER}/x64/lib/Release
      LIBS += -lopencv_world$${OPENCVVERSION}
  }
  CONFIG(debug, debug|release) {
      DEFINES += DEBUG_MODE
      LIBS += -L$${OPENCVFOLDER}/x64/lib/Debug
      LIBS += -lopencv_world$${OPENCVVERSION}d
  }
}

【讨论】:

  • 你能给我一个链接吗,你是如何在你的Qt Creator中安装(添加)OpenCV的,因为我的opencv文件夹中没有.lib文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
相关资源
最近更新 更多