无法找到 v143 的生成工具(平台工具集 =“v143”)
若要使用 v143 生成工具进行生成,请安装 v143 生成工具。或者,可以升级到当前 Visual Studio 工具,方式是通过选择“项目”菜单或右键单击该解决方案,然后选择“重定解决方案目标”。 MatchTool C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets 439
<!-- Error if toolset not found -->
<VCMessage Code="MSB8020" Type="Error" Arguments="$(_PlatformToolsetShortName);$(PlatformToolset)" Condition="'$(DesignTimeBuild)' != 'true' and '$(_ToolsetFound)' != 'true'" />
‘strdup’: The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _strdup. See online help for details
这个编译警告信息指出 'strdup'
函数的使用已经不推荐,因为它是 POSIX 标准的一部分,而不是 ISO C 或 C++ 标准。为了保持与 ISO C 和 C++ 标准的一致性,建议使用 _strdup
函数,这是 Microsoft 特定实现的 ISO 兼容版本。
在 Microsoft Visual C++ 编译器中,_strdup
是 strdup
的 ISO C++ 兼容替代品。如果你的代码中使用了 strdup
,并且你希望消除这个警告,你可以将其替换为 _strdup
。
以下是如何替换的示例:
// 使用 POSIX 标准的名称
char* myString = strdup("Hello World");
// 替换为 ISO C++ 标准的名称
char* myString = _strdup("Hello World");
请注意,_strdup
函数是 Microsoft 的扩展,可能在其他编译器或平台上不可用。如果你的代码需要在多种平台上兼容,你可能需要使用其他方法来复制字符串,例如使用 std::string
或者 std::strcpy
结合 malloc
。
例如,使用 std::string
:
#include <string>
std::string original = "Hello World";
std::string copy = original; // 复制字符串
或者使用 strcpy
和 malloc
:
#include <cstring>
#include <cstdlib>
const char* original = "Hello World";
char* copy = (char*)malloc(strlen(original) + 1);
strcpy(copy, original); // 复制字符串
记得在使用 malloc
分配内存后,需要在适当的时候使用 free
来释放内存。
Windows 下Qt Creator构建错误👎 error: LNK1158: 无法运行“rc.exe” 的问题
在 Windows 操作系统中,使用 Qt Creator 配合 MSVC(Microsoft Visual C++ Compiler)构建套件进行项目编译时,若遇到错误信息 “error: LNK1158: 无法运行‘rc.exe’”,这通常意味着 Qt Creator 未能正确识别或定位到资源编译器的路径。这一问题通常是由于 Qt Creator 未被正确配置以找到 rc.exe 文件所导致的。
针对这一问题,网络上的解决方案建议将 rc.exe 和 rcdll.dll 文件复制到 Qt Creator 安装目录下的相应构建套件的 bin 文件夹中,以及 Visual Studio 安装目录下的 VC/bin 文件夹中。具体路径为:
- *D:\Qt\Qt5.12.10\5.12.10\msvc2017\bin*
- *C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin*
然而,当计算机上安装了多个版本的 Windows Kits 时,可能会存在多个 rc.exe 文件。在这种情况下,需要确定与当前项目兼容的特定 Windows Kits 版本,并确保 Qt Creator 能够找到与之对应的 rc.exe。
为了解决这一问题,可以采取以下步骤来定位正确的 Windows Kits 版本及其对应的 rc.exe 文件:
- 检查 Qt Creator 项目文件(.pro 文件)或其他相关配置文件,确认项目所需的 Windows Kits 版本。
- 在系统路径中搜索 rc.exe 文件,使用命令行工具(如 cmd 或 PowerShell)执行
where.exe rc.exe
命令,列出所有找到的 rc.exe 文件路径。 - 根据项目需求,选择正确的 rc.exe 文件路径,并将其路径添加到 Qt Creator 的构建套件配置中,或者直接复制到上述提到的 Qt Creator 或 Visual Studio 的 bin 目录下。
通过上述步骤,可以确保 Qt Creator 在构建过程中能够正确调用到匹配的资源编译器,从而解决 LNK1158 错误。在实际操作中,可能需要根据具体的环境配置和项目需求进行适当的调整。
- 已安装Visual Studio 2015
- 已安装Qt Creator
- Windows 10 Pro x64
查看当前Qt Creator所用的MSVC构建套件所使用的Windows Kits版本信息
打开 Qt Creator,任意新建一个工程,在套件选择的界面中可以看到这里探测到了我的MSVC2015,这里我只选择MSVC2015 64bit这个套件,如图1所示。
工程创建完毕之后,我们进行构建操作,可以发现此时显示出了错误信息 error: LNK1158: 无法运行“rc.exe”
此时我们点击 左侧的 项目,然后找到我们所使用的构建套件下的Build,并将构建环境详情展开,如图所示。
从环境变量列表中可以看到,这里有很多环境变量信息,有些环境变量是系统中已经存在的,有些是Qt Creator所添加的。这里我们着重关注 下面2个环境变量
- WindowsSdkDir
- WindowsSDKVersion
在我的计算机中,环境变量 WindowsSdkDir 对应的是 C:\Program Files (x86)\Windows Kits\10\ ,表示当前的WindowsSDK的目录,环境变量WindowsSDKVersion 对应的是 10.0.18362.0\ ,从这连个内容我就可以知道Qt 在这个构建套件下所需要的rc.exe文件应该是 **C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\ ,**我们进入这个目录查看一下,如图所示。
这里有一个arm、arm64和x86、x64,这里我们只需要关注x86和x64即可,例如这里我们工程用的是MSVC2015 x64构建套件,所以我们进入到x64目录下找到rc.exe和rcdll.dll这俩文件,将其拷贝到
[QtCreator安装目录]\[Qt版本号]\[构建套件]\bin 这个目录下即可,我的电脑上的对应目录是 D:\Applications\QtCreator\5.12.2\msvc2015_64\bin ,如图所示,是拷贝后的结果。
拷贝完成之后,再次回到我们的Qt Creator中进行构建,就可以发现此时已经OK了。
总体思路
- 从Qt Creator工程的环境变量中定位 Windows Kits版本信息
- 复制对应的rc和rcdll到Qt目录下对应的构建套件的bin目录中