但每当我调用它时,例如在Qt Creator中作为构建步骤,它只是发出此消息(我的测试应用程序称为day_404:D):
Unable to find dependent librarIEs of /home/marius/Entwicklung/build-day_404-windows_32bit-Release/release/day_404.exe :Not implemented.
你们中的任何人都知道如何解决这个问题,并且在不使用windows的情况下使用windeployqt吗?
提前致谢,
马吕斯
获取需要复制以进行部署的所有DLL列表的一种相对简单的方法是在wine下运行应用程序并跟踪所有dll加载.
例如这样:
$WINEDEBUG=+loaddll wine ./myapp 2> dll.log
可以像这样提取dll路径:
$grep Loaded dll.log | grep -v 'system32\|:load_builtin_dll' \ | awk -F'"' '{print }' \ | 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".*\)"$/;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"'/@' \ | 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总结
以上是内存溢出为你收集整理的如何在Linux / Fedora中使用Qt的’windeployqt’全部内容,希望文章能够帮你解决如何在Linux / Fedora中使用Qt的’windeployqt’所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)