好吧,我花了一天时间寻找解决方案并阅读了所有内容,但我无法部署我的 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,如您所见。
.../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 位)上,它给了我错误。关于这个的图片:
如何在32位机器上运行?我在每个构建、release-win32、debug-win32 中都尝试过,但都不起作用。我无法在更多机器上测试它,在 XP 上它甚至无法加载 C 运行时,但这不是目标平台。
更多信息请评论。
编辑:目标电脑上的 Dependency walker 显示与开发电脑上的相同。它仍然可以找到插件,但无法加载。
最佳答案
我不知道你为什么要设置路径等等。你链接的 Qt wiki 文章显示你没有 plugins 文件夹,但该文件夹中的所有内容都应该去到您的可执行文件的文件夹中。
他们给出的建议很简单:
Qt 的 bin 目录中的每个 .dll 都需要复制到您的可执行文件的文件夹中。
Qt 的 plugins 和 qml 文件夹中的所有内容(文件和文件夹)都需要复制到您的可执行文件的文件夹中。
然后您可以将其缩减为不使用的模块。对我有用,很好。
说“我必须将 .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/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
在前面两节的例子中,主界面窗口的尺寸和标签控件显示的矩形区域等,都是用C++代码编写的。窗口和控件的尺寸都是预估的,控件如果多起来,那就不好估计每个控件合适的位置和大小了。用C++代码编写图形界面的问题就是不直观,因此Qt项目开发了专门的可视化图形界面编辑器——QtDesigner(Qt设计师)。通过QtDesigner就可以很方便地创建图形界面文件*.ui,然后将ui文件应用到源代码里面,做到“所见即所得”,大大方便了图形界面的设计。本节就演示一下QtDesigner的简单使用,学习拖拽控件和设置控件属性,并将ui文件应用到Qt程序代码里。使用QtDesigner设计界面在开始菜单中找到「Q
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
我在目录“C:\DocumentsandSettings\test.exe”中有一个文件,但是当我用单引号编写命令时`C:\DocumentsandSettings\test.exe(我无法在此框中显示),用于在Ruby中执行命令,我无法这样做,我收到的错误是找不到文件或目录。我尝试用“//”和“\”替换“\”,但似乎没有任何效果。我也使用过系统、IO.popen和exec命令,但所有的努力都是徒劳的。exec命令还使程序退出,这是我不想发生的。提前致谢。 最佳答案 反引号环境就像双引号,所以反斜杠用于转义。此外,Ruby会将空格解
我看到我可以使用获取目录中的文件列表Dir["*"]我应该如何准确阅读该语法?据我所知,您可以使用[]从数组或散列中获取值。[]如何处理通话? 最佳答案 []只是一个方法,如#to_s、#object_id。等你可以在任何对象上定义它:classCoolClassdef[](v)puts"hello#{v}"endendCoolClass.new["John"]#=>"helloJohn"在你的情况下,它被定义为单例方法,以这种方式:classDirdefself.[](v)...endend
下载微PE工具箱进入官网下载微PE工具箱-下载 安装好后,打开微PE工具箱客户端,选择安装PE到U盘 PE壁纸可选择自己喜欢的壁纸,勾选上包含DOS工具箱,个性化盘符图标 下载原版系统进入网站下载镜像NEXT,ITELLYOU如果没有账号,注册一下就好进入选择开始使用选择win10 这里我们选择消费者版,用迅雷把BT种子下载下来 下面的两个盘符,是PE工具箱安装进U盘后,分成的盘符,注意EFI的盘符,这里面不能删东西,也不能添东西,另一个盘符可以当做正常的U盘空间使用,我们现在需要把下载下来的景象文件复制到正常的U盘空间中去 这个时候我们的系统U盘就只做好了 安装系统我们将U盘插入电脑,开机,
目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'
我在安装“redcarpet”gem时遇到以下错误。它在我friend的机器上安装没有问题。(我想安装它来运行yard)ruby版本:1.9.3命令输出:D:\Learning\Common_POM_FW\SampleProjects>yard[error]:Missing'redcarpet'gemforMarkdownformatting.Installitwith`geminstallredcarpet`D:\Learning\Common_POM_FW\SampleProjects>geminstallredcarpetTemporarilyenhancingPATHtoinc