【发布时间】:2016-07-02 01:34:48
【问题描述】:
目前我正在尝试使用 Linux 中的 MinGW 和 CMake 为 Windows 部署 Qt 应用程序。我使用 MXE 准备构建环境(安装 mingw32 并编译 Qt5 共享库)。我已经编写了 CMakeList.txt 和一个工具链脚本,它们可以构建我的应用程序。
我无法实现的是将共享的 Qt dll 传递给我构建的可执行文件。
这是我的工具链文件: http://pastebin.com/gh7kSda4
这是我的 CMakeLists.txt: http://pastebin.com/wHA7f7Sj
这是该脚本的摘录,包含安装部分:
# Installation.
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/${TOOLCHAIN}-Bundle)
install(TARGETS mEyeSaver
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX})
install(CODE "
include(BundleUtilities)
fixup_bundle(\"${CMAKE_INSTALL_PREFIX}/mEyeSaver${TOOLCHAIN_EXECUTABLE_FORMAT}\" \"\" \"${QT5_PATH}/bin\")
" COMPONENT Runtime)
如您所见,我使用 fixup_bundle 来实现我的目标。
在我输入 make install 后,我得到以下输出:
http://pastebin.com/DymaH1Mu
之后,x86_64-w64-mingw32-Bundle 文件夹中除了 mEyeSaver.exe 之外什么都没有。没有 dll 被复制。
我确定~/mxe/usr/x86_64-w64-mingw32.shared/qt5/bin 文件夹中需要Qt dll。但我还是有一些地方做错了。
如何解决问题? 谢谢
更新
我重新考虑了我正在做的事情,发现可能 fixup_bundle 无法分析 Windows 可执行文件的依赖项,因为 Linux ldd(它使用的)与 Windows 应用程序无关。所以我编辑了我的问题。
是否有任何简单的方法可以使用 CMake(或其他工具)为 Windows 可执行文件获取依赖库,而无需直接复制它们?
【问题讨论】:
-
成功了吗?除非我做错了,否则这是一个很好的问题。本质上,如何“安装”运行时所需的 Qt 库。
-
@joe,对不起,我花了这么长时间才回答。不幸的是,我还没有找到想要的解决方案。这是我能得到的最远距离:
objdump -p app.exe | grep DLL(linux-tips.com/t/…)。因此,您必须使用构建脚本手动解析输出并复制所需的库,不包括KERNEL32.dll之类的库。一个重要的注意事项是,您不会看到列出的 DLL 的更深层次的依赖关系,因此您还必须递归地遍历它们。
标签: c++ cmake mingw cross-compiling mxe