QT Creator 中的部署和静态打包将 QT 和 OpenCV 链接到单个可执行文件中
Posted
技术标签:
【中文标题】QT Creator 中的部署和静态打包将 QT 和 OpenCV 链接到单个可执行文件中【英文标题】:Deployment and Static Packaging within QT Creator linking QT and OpenCV in single Executable 【发布时间】:2012-07-05 15:21:48 【问题描述】:是否有人将 QT 和 OpenCV 结合使用,并且有很好的方法来打包您的软件并部署给您的用户?我们开发的 QT Creator 有一个发布和部署按钮,但它似乎与生成的二进制文件没有什么不同,而不是常规构建和使用路径中库的动态链接。
我们主要对 Linux 和 Mac 感兴趣,但也想了解适用于 Windows 的好方法。
我们已经做了一些关于必须静态编译 QT 版本的研究,但这是否意味着每次我们在通用测试中构建项目时都必须重新编译所有 QT?
更新! 在此处的帮助下,我得到了 QT 静态编译并将其自身捆绑到 Ubuntu 上的二进制文件中。我现在的问题是我收到诸如
之类的错误":-1: error: error: avformat: No such file or directory"
当我尝试使用静态版本的 opencv 2.4.2 进行编译时
这就是我所做的:
对我来说,诀窍是弄清楚“path/to/qt”是什么意思,以及在“-prefix”后面放什么。 Suslik 的链接将我引向此:github.com/refuge/whitesheep/wiki/Compiling-Qt-statically 大致相同,但帮助我找出了正确的语法以使一切顺利进行。最后我发现你需要下载qt-everywhere tar of libraries,解压缩,进入它然后运行命令,使用“path/to/qt”作为这个文件夹。因此我的命令看起来像这样
cd /home/biotracking/qt-everywhere-opensource-src-4.8.2
./configure -static -prefix /home/biotracking/qt-everywhere-opensource-src-4.8.2
接下来在 QtCreator 中选择“Projects>BuildSettings>Add”,我将这个新的构建设置称为“staticrelease”。在“Qt 版本:”下,我选择管理,找到包含全新 qmake 文件的“qt-everywhere-opensource-src-4.8.2”内的 bin 文件夹并选择它。 现在 QT 将使用这个静态版本的 QT 并制作一个漂亮的胖二进制文件(不过似乎不需要更长的时间,这很好!)
然后我必须进入我的 Qt-OpenCv 项目中的 .pro 文件并添加一些静态命令,所以现在它看起来像这样:
QT += core gui
TARGET = AntennateSRC
TEMPLATE = app
CONFIG+=static
QMAKE_LFLAGS += -static
QMAKE_LFLAGS += -static-libgcc
static
DEFINES += STATIC
unix
CONFIG += link_pkgconfig
PKGCONFIG += opencv
PKGCONFIG += pcl_io-1.6
#PKGCONFIG += pcl_libraries
SOURCES += main.cpp\
antennate.cpp \
Track.cpp \
ICPTracker.cpp
HEADERS += antennate.h \
Track.h \
ICPTracker.h
FORMS += antennate.ui
RESOURCES += antennate.qrc \
这就是我卡住的地方。我编译了一个静态版本的opencv 2.4.2(在cmake-gui中关闭了BUILD_SHARED_LIBS),成功了,卸载了旧的opencv,安装了这个版本。现在我得到了 9 个奇怪的错误,比如
:-1: error: error: swscale: No such file or directory
PS. 604kb 与 13.9 mb 的可分发文件大小的差异,就我们而言仍然不是那么大。
【问题讨论】:
【参考方案1】:Qt 是 LGPL 的,因此静态链接它需要您公开源代码。这对你来说可能是也可能不是问题,但在你走这条路之前要确保。
在 Linux 上打包和发布取决于目标发行版是什么。看看这个:Building Qt Application Linux。 Shell 脚本是您的朋友。
对于 Mac,您要遵循本指南:http://doc.qt.io/archives/qt-4.7/deployment-mac.html
【讨论】:
我会检查并报告进展情况!感谢您的建议!同样是的,我们所做的一切都是完全开源的,所以我们可以免费提供源代码!谢谢! @blorgggg 如果你在 linux 上分发它的价值,你的用户最好不要静态链接 qt,因为他们可能已经安装了它(使用 debs 和 rpms 你可以依赖在包管理器上为您获取它)。这将使您的可分发内容更小。 谢谢,是的,我们也认为这是一种可能性,尽管看起来 604kb 与 13.9 mb 的可分发文件的大小差异,就我们而言,这仍然不是那么大。至于我们的客户(与我们合作获得 NSF 资助的昆虫科学家)不介意文件稍大一点,只要他们有一个东西,他们只需下载并点击它就可以了!另外,由于我们要交付到多个系统,例如 mac 好消息!让 QT 静态编译!对我来说,诀窍是弄清楚“path/to/qt”是什么意思,以及在“--prefix”之后放什么。您的链接将我引向此:github.com/refuge/whitesheep/wiki/Compiling-Qt-statically 大致相同,但帮助我找出了正确的语法以使一切顺利进行。最后,我发现您需要下载库的 qt-everywhere tar,解压缩,进入其中然后运行命令,将“path/to/qt”设置为此文件夹。然后运行'./configure -static -prefix /home/biotracking/qt-everywhere-opensource-src-4.8.2' 现在的问题是将 OpenCV 捆绑在一起。我现在也用我的配置和制作新知识成功地静态编译了它,但是在编译整个项目时我得到了一些错误,“:-1:错误:错误:avutil:没有这样的文件或目录”我想我'将更新我原来的问题以在那里填写新的详细信息。以上是关于QT Creator 中的部署和静态打包将 QT 和 OpenCV 链接到单个可执行文件中的主要内容,如果未能解决你的问题,请参考以下文章