如何在Linux / Fedora中使用Qt的’windeployqt’
我目前正在尝试将Fedora 21计算机上的Qt应用程序交叉编译为
Windows(目前为32位).编译工作没有问题,但部署没有.对于cours,我可以从目录中复制所有必要的文件,但我认为这是浪费时间,所以我想使用Qt的’windeployqt’工具.
Unable to find dependent libraries of /home/marius/Entwicklung/build-day_404-Windows_32bit-Release/release/day_404.exe :Not implemented. 你们中的任何人都知道如何解决这个问题,并且在不使用Windows的情况下使用windeployqt吗? 提前致谢, 解决方法windeployqt工具似乎在Fedora 23上不可用.它依赖于访问qmake,因此,它不适用于使用mingw32-qmake-qt5(或mingw64-qmake-)构建的mingw交叉编译环境. QT5).即使修补了这个问题 – 使用mingw64-cmake也不适用于Qt5项目.获取需要复制以进行部署的所有DLL列表的一种相对简单的方法是在wine下运行应用程序并跟踪所有dll加载. 例如这样: $WINEDEBUG=+loaddll wine ./myapp 2> dll.log 可以像这样提取dll路径: $grep Loaded dll.log | grep -v 'system32|:load_builtin_dll' | awk -F'"' '{print $2}' | sed -e 's@\@/@g' -e 's/^[A-Z]://' | sort > dll.lst 对于使用mingw64交叉编译的典型Qt5项目,文件dll.lst看起来像这样: /path/to/cwd/myapp.exe /path/to/cwd/project.dll [..] /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libpng16-16.dll /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libstdc++-6.dll /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libwinpthread-1.dll /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libxml2-2.dll /usr/x86_64-w64-mingw32/sys-root/mingw/bin/Qt5Core.dll /usr/x86_64-w64-mingw32/sys-root/mingw/bin/Qt5Gui.dll /usr/x86_64-w64-mingw32/sys-root/mingw/bin/Qt5Widgets.dll /usr/x86_64-w64-mingw32/sys-root/mingw/bin/zlib1.dll /usr/x86_64-w64-mingw32/sys-root/mingw/lib/qt5/plugins/imageformats/qgif.dll /usr/x86_64-w64-mingw32/sys-root/mingw/lib/qt5/plugins/imageformats/qico.dll /usr/x86_64-w64-mingw32/sys-root/mingw/lib/qt5/plugins/imageformats/qjpeg.dll /usr/x86_64-w64-mingw32/sys-root/mingw/lib/qt5/plugins/platforms/qwindows.dll 然后,您可以像这样部署这些文件: $mkdir -p "$deploy_dir"/{imageformats,platforms} $for i in imageformats platforms ; do grep "/plugins/$i" dll.lst | xargs -r cp -t "$deploy_dir"/$i done $grep -v '/plugins/' dll.lst | xargs -r cp -t "$deploy_dir" 葡萄酒配置 为了在wine下运行交叉编译的二进制文件,必须将mingw dll目录添加到wine路径,例如,通过: sed 's/^("PATH".*)"$/1;Z:\usr\x86_64-w64-mingw32\sys-root\mingw\bin"/' -i $HOME/.wine/system.reg 文件?/ .wine / system.reg是由wine自动创建的,如果它还不存在的话. PELDD 您还可以使用工具peldd获取Windows二进制文件所依赖的所有DLL的列表.该工具在Linux上运行,例如: $peldd myapp.exe -a -p . | sed -e 's@^./@'"$PWD"'/@' -e 's@^([^/])@'"$PWD"'/1@' | sort > dll2.lst 该工具将所有依赖项转换为编译到二进制文件中 – 但是 – 在运行时有条件加载的DLL(想想dlopen(),想想Qt插件)不会在二进制头文件中留下痕迹.与此相反:在wine下运行时,也会记录这些DLL.对于我们的示例,这可能是: /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libjpeg-62.dll /usr/x86_64-w64-mingw32/sys-root/mingw/lib/qt5/plugins/imageformats/qgif.dll /usr/x86_64-w64-mingw32/sys-root/mingw/lib/qt5/plugins/imageformats/qico.dll /usr/x86_64-w64-mingw32/sys-root/mingw/lib/qt5/plugins/imageformats/qjpeg.dll /usr/x86_64-w64-mingw32/sys-root/mingw/lib/qt5/plugins/platforms/qwindows.dll (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |