gpt4 book ai didi

windows - 在 win7 32 位上部署 Qt 应用程序 - 在 Win7 x64 上工作(和编译)

转载 作者:可可西里 更新时间:2023-11-01 09:29:02 25 4
gpt4 key购买 nike

好吧,我花了一天时间寻找解决方案并阅读了所有内容,但我无法部署我的 Qt 应用程序,所以我决定问问。

我在 VS 2013 Ultimate 中通过 Visual Studio 插件使用 Qt 5.2.1,qt 版本是 msvcr2012。我有 Qt 5.2 的 x86 版本(现在是 Qt 下载页面底部的第三个)。

我的目标是 Win7 32 位。

我的操作系统是 Windows7 64 位,我正在为 win32 构建应用程序,release /o2(最大速度) 优化, /MD(动态 C 运行时),链接库:

qtmain.lib
Qt5Core.lib
Qt5Gui.lib
Qt5Widgets.lib
Qt5PlatformSupport.lib //this one is added by me, the others are automatically set with the Qt-AddIn template.

我构建它,并在发布文件夹中放入以下内容:

编辑:由于我的编译器版本,我还分发了 vs2012 dll.s,如您所见。

enter image description here

.../release                                            /plugins        /platforms

我已经设置了额外的库路径(只是为了 100% 的机会找到它们):

void registerPluginsDir(QDir& exeDir)
{
QString pluginsRelPath = "plugins";
QString platformsRelPath = "platforms";
QString pluginsPath = exeDir.absoluteFilePath(pluginsRelPath);
QString platformsPath = QDir(pluginsPath).absoluteFilePath(platformsRelPath);
QStringList pathes = QCoreApplication::libraryPaths();
pathes << pluginsPath;
pathes << platformsPath;
QCoreApplication::setLibraryPaths(pathes);

for (auto i : pathes)
qDebug() << i << "\n";
};

int main(int argc, char *argv[])
{
QString exePath = QString::fromUtf8(argv[0]);
QFileInfo exeInfo(exePath);
QDir exeDir(exeInfo.absolutePath());
registerPluginsDir(exeDir);

QApplication a(argc, argv);
KeyGenerator w;
w.show();
return a.exec();
};

路径是正确的。通过调试器,我看到它们是从我的应用程序文件夹中加载的,而不是从 Qt 主文件夹中加载的。

我用 depends.exe 检查了一切。我只收到 2 条警告,没有错误:

Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.

我已经根据在Visual Studio 中调试应用程序时加载的.dll-s 复制了.dll-s。 depends.exe 和 debug 之间的唯一区别是,VS 系统 dll-s 是从 SysWOW64 加载的,而不是 system32。

所有这些都在我的(开发者)电脑上运行,没有任何错误,但在测试(在 Microsoft Virtual PC 上运行的 Win7 32 位)电脑上我得到了“臭名昭著”的错误:

Failed to load platform plugin “windows”. Available platforms are:
(and here there are the full pathes to the .dll-s,
eg: D:\cproj\keygen\win32\Release\plugins\platforms\qwindows.dll, so it must have found them.

我也关注了这个:http://qt-project.org/wiki/Deploy_an_Application_on_Windows .
重命名 Qt-dir,控制台仅将发布文件夹输出为库输入(而不是像我的第一个测试那样的 Qt 文件夹)。它从应用程序文件夹加载 dll-s,启动良好。然而,在我的虚拟 PC 上,或者在我兄弟的 pac(Win7 32 位)上,它给了我错误。关于这个的图片:

enter image description here

如何在32位机器上运行?我在每个构建、release-win32、debug-win32 中都尝试过,但都不起作用。我无法在更多机器上测试它,在 XP 上它甚至无法加载 C 运行时,但这不是目标平台。

更多信息请评论。

编辑:目标电脑上的 Dependency walker 显示与开发电脑上的相同。它仍然可以找到插件,但无法加载。

最佳答案

我不知道你为什么要设置路径等等。你链接的 Qt wiki 文章显示你没有 plugins 文件夹,但该文件夹中的所有内容都应该去到您的可执行文件的文件夹中。

deployment screenshot

他们给出的建议很简单:

  1. Qt 的 bin 目录中的每个 .dll 都需要复制到您的可执行文件的文件夹中。

  2. Qt 的 pluginsqml 文件夹中的所有内容(文件和文件夹)都需要复制到您的可执行文件的文件夹中。

然后您可以将其缩减为不使用的模块。对我有用,很好。

说“我必须将 .dll-s 添加到发布版本中,因为我没有使用商业版本”也是不正确的。如果你follow my advice ,您可以使用 Qt 5 和 MSVC 2012 轻松构建静态链接的可执行文件,我什至详细介绍了如何使用所有这些来定位 Windows XP。根据 LGPL 条款,您可以做得很好,您只需要让您的用户重新链接您的项目(这并不意味着提供 C++ 源代码!)。

关于windows - 在 win7 32 位上部署 Qt 应用程序 - 在 Win7 x64 上工作(和编译),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22490869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com