编译 Qt 项目并包含 Qt 库

Posted

技术标签:

【中文标题】编译 Qt 项目并包含 Qt 库【英文标题】:Compile a Qt-Project and Include Qt Libraries 【发布时间】:2013-10-15 07:15:36 【问题描述】:

我有一个使用 Qt 的 C++ 项目,它按预期工作。但是,问题是当我复制 执行到标准安装的操作系统(例如 Windows 或 Linux)的可执行文件 在执行时我收到 QtWidgets 或其他一些 Qt 库丢失错误。

我尝试参考 Qt 文档,但找不到解决方案或我所追求的示例。它与静态和动态构建有关...但找不到好的示例或教程。

我查看了教程http://www.qtcentre.org/wiki/index.php?title=Deploying_Qt_Applications,但这并不是最有效的解决方案。

基本上我希望系统包含所需的 Qt 库以及最终编译的文件。怎么办?

【问题讨论】:

只需将所需的 DLL 从 QT-bin 目录复制到与可执行文件相同的目录即可。如果使用mingw编译还提供了mingw所需的dll,见***.com/questions/17377706/… 我没有在 Windows 上测试过,但在 Linux 上将 libQtCore.so(和其他库)复制到与可执行文件相同的目录仍然会引发错误。无论如何,在应用程序中我可以指定应用程序应该在其中查找这些库的文件夹吗?不知道为什么这些功能不像指定一个相对文件夹那么简单! 我不确定你想要达到什么目的。您提供的链接中已经介绍了我唯一推荐的内容。也许您可以指定您不喜欢那里的解决方案。 void QCoreApplication::addLibraryPath ( const QString & path )。在 Linux 中,库将被放置在系统范围的库文件夹中(以及系统范围包含文件夹的标题)。 我将尝试 addLibraryPath() 方法,看看是否会有所作为。基本上我正在寻找像 /bin/macdeployqt 提供的解决方案。它会自动将 Qt 库复制到主可执行文件之外的特定文件夹中,并且一切都是自动的。在上面的 URL 上,我不喜欢 helper bash 脚本。真的在寻找一个跨平台的解决方案。 【参考方案1】:

您可以做一个脚本,将您的 DLL(或 .so* 文件)复制到可执行文件夹中。一旦你让它在你的项目文件中添加一个额外的 Makefile 目标:

theproject.pro:

OTHER_FILES += copy.script    # Assuming your copy script is called "copy.script" 
deploylibs.target = deploylibs
deploylibs.command = ./copy.script    # Launching the script

QMAKE_EXTRA_TARGETS += deploylibs

现在您可以使用 (n)make deploylibs 命令部署您的库。

注意:有一个非常有用的工具叫做“Dependency Walker”可以找到你需要的DLL。它仅适用于 Windows。至于 Linux 及其*.so* 文件,您可以使用ldd 命令:

>$: ldd theexecutable
    alib.so => /path/to/library/on/your/computer.so
...

【讨论】:

以上是关于编译 Qt 项目并包含 Qt 库的主要内容,如果未能解决你的问题,请参考以下文章

QT中使用MinGW 编译的protobuf库--包含库的生成和使用

如何将 qrc 数据包含到使用 CMake 编译的基于 Qt 的二进制文件中

在文件夹中组织Qt项目文件,并简化包含

centos下Qt项目编译的包含多个so库的软件,不能双击执行

调试 Qt 项目文件?

MSVS2012 中的 QCustomPlot