如果从cmd.exe运行而不是从Qt Creator内部运行,则基于Qt的C ++项目可以工作

如何解决如果从cmd.exe运行而不是从Qt Creator内部运行,则基于Qt的C ++项目可以工作

我正在为Windows(仅Windows-根本没有跨平台)编写一个非常小的基于Qt的C / C ++应用程序,该应用程序使用VISA库(visa64.dll)与某些外部硬件进行通讯。该库又使用其他一些库:

Screenshot from Dependency Walker/depends.exe

(Dependency Walker的屏幕快照,也称为Depends.exe)

最初,我在Visual Studio中编写了它,效果很好。然后我将其移植到Qt Creator(使用Qt5,带有MSVC 2015 Visual C ++工具链),但出现运行时错误。它知道在哪里可以找到外部头文件,因此我认为我的INCLUDEPATH是正确的,并且构建良好,所以我认为.pro文件中的LIBS变量是正确的,也就是说它可以找到所需的.lib文件。但是,我从该外部库(viOpenDefaultRM)调用的第一个API返回以下错误:VI_ERROR_LIBRARY_NFOUND。无论是进行调试版本还是发布版本,以及是否通过调试程序运行它,都会发生这种情况。只要我在Qt Creator中运行程序,它就会遇到运行时错误。

这是我的.pro文件:

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += main.cpp

INCLUDEPATH += $$PWD/'../../../../Program Files/IVI Foundation/VISA/Win64/Include'

LIBS += -L$$PWD/'../../../../Program Files/IVI Foundation/VISA/Win64/Lib_x64/msc/' -lvisa64

INCLUDEPATH += $$PWD/'../../../../Program Files/IVI Foundation/VISA/Win64/Include'
DEPENDPATH += $$PWD/'../../../../Program Files/IVI Foundation/VISA/Win64/Include'

/Include结尾的路径具有标头(.h)文件(它是C库),而以/msc结尾的路径具有.lib文件。 .lib文件不是静态库,它们是某些相应DLL的接口文件。这些DLL文件位于C:\System32中。 C:\SysWOW64中也有32位版本。它们可能也存在于其他地方,但是如果他们不知道的话。

现在,如果我从cmd.exe运行它,则可以正常运行。也就是说,如果我打开cmd.exe终端窗口并导航到Qt项目的生成目录(c:\blah\blah\blah\obj\debug\),然后从cmd.exe运行可执行文件,则不会出现运行时错误。它可以连接到外部硬件,与之交谈,所有美好的事情正在发生,令人非常高兴。

我已经对这个问题进行了大量的搜索和研究,而大多数人却遇到了相反的问题,这意味着那个问题(与我的)是在Google / DuckDuckGo / StackOverflow / forum.qt.io / doc.qt.io搜索中出现的。这个问题通常与Qt库丢失/放错位置有关。 Here是一个示例。这个问题的答案通常以指向如何在Windows上部署Qt项目的页面的链接结尾,例如this article

我还读过Qt的this文章,内容涉及如何向您的项目中添加库,但这并没有帮助我,但是我可能会遗漏某些东西和/或做错了事。

这可能是我真正想不到的东西,但坦率地说,我希望是。谢谢* 10 ^ 6。

解决方法

TL; DR:我用来在Qt Creator中进行编译的工具包的PATH设置与系统PATH的设置不同。为了解决这个问题,我在echo %PATH中做了cmd.exe,并将与我要使用的驱动程序有关的所有内容复制到了我正在使用的工具包的PATH中Qt Creator。下面有更多详细信息。

今天早上我得到了这个。正如@ adrien-lerevat所建议的那样,当从Qt Creator中运行时,我的可执行文件找不到所需的某些DLL。总而言之,就是我在我的工具包(Qt中的“工具包”基本上是编译器,调试器和一些环境变量)中定义了一个PATH,与 是我的正常系统路径的超集。您看到,我已经从其他项目继承了该工具包的其他用途,但是我没有意识到可以在其中设置PATH,或者我正在设置一个。因此,要找到我为Qt Creator设置的PATH,我转到了Tools下拉菜单,依次选择Options...,然后依次选择Build & RunKits。然后单击您要用来编辑它的工具包。因此: enter image description here

enter image description here

这应该给您列出所有内容,其中一个称为Environment。那应该有一个Change...按钮,您可以按下: enter image description here

这将打开一个包含您所有环境内容的新窗口: enter image description here

(屏幕截图来自我已解决问题的之后)

这是我找到PATH的地方,还有一些库,其中包含值得了解的路径。因此,现在我知道我的Qt Creator PATH是什么了,我打开cmd.exe并键入命令echo %PATH%来找出我的系统PATH是什么。我抓住了与我正在使用的VISA驱动程序有关的所有内容(基本上是路径中带有VISA和/或IVI Foundation的所有内容),并将它们粘贴到Qt Creator中的PATH中。这是我粘贴在那里以使其工作的东西的清单:

C:\WINDOWS\system32;C:\Program Files\IVI Foundation\VISA\Win64\ktvisa;C:\Program Files\IVI Foundation\VISA\Win64\bin;C:\Program Files (x86)\IVI Foundation\VISA\WinNT\bin;C:\Program Files (x86)\IVI Foundation\VISA\WinNT\Bin\;C:\Program Files\IVI Foundation\VISA\Win64\Bin\;C:\Program Files (x86)\IVI Foundation\VISA\winnt\agvisa;C:\Program Files\Keysight\IO Libraries Suite\bin;C:\Program Files (x86)\Keysight\IO Libraries Suite\bin;C:\Program Files (x86)\IVI Foundation\VISA\WinNT\ktvisa;C:\Program Files (x86)\IVI Foundation\IVI\bin;C:\Program Files\IVI Foundation\IVI\bin;

我添加了c:\system32,因为我知道那是Visa64.dll所在的地方,它至少是我知道我需要的一个顶级DLL。不过,奇怪的是,当我添加 just c:\system32而没有所有VISAIVI Foundation的东西时,那是行不通的。因此,我不知道添加到Qt Creator路径中的一切是否必要,因为我刚刚遇到了这种解决方案,但是一旦我缩减列表以找出我真正想要的是什么,需要,我将在此处添加该信息。以防万一其他人遇到这个问题或感到好奇。为了完整起见,我想。好的,谢谢大家;)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-