静态 link 所有依赖项,这样最终用户将永远不会被要求安装 vc_redist.exe
Statically link all dependences so that the end user will never be asked to install vc_redist.exe
我正在使用 VS 2019 构建一个 Windows 可执行文件。当我 运行 它在我的机器上时,它可以工作,但我不能 100% 确定它是否适用于最终用户没有 vc_redist.x64.exe
2019 版。(尤其是 Win7 用户 - 它处于用户仍在使用此版本的利基市场)。
如何静态 link 一切,以便最终用户永远不会被要求下载和安装 Visual C++ Redistributable "vc_redist"?
我正在使用 msbuild.exe
,没有使用 IDE。 要在 .vcxproj
文件或 .cpp
文件中添加哪个设置来启用完全静态 linking,以防止需要 vcredist?
我的 .cpp 代码需要这些库:
#pragma comment(lib, "comctl32.lib")
#pragma comment(lib, "winmm.lib")
示例 .vcxproj:
<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.default.props" />
<PropertyGroup>
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ItemGroup>
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="main.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Targets" />
</Project>
注意:它是 link 与主题 How to deploy a Win32 API application as an executable 一起编辑的,但这里是关于直接从 .vcxproj
文件和 没有 [=36] =] IDE.
为编译配置添加特定的 ClCompile 属性:
<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
</ItemDefinitionGroup>
</Project>
可能的值在这里:runtimeLibraryOption 枚举
(去掉“rt”前缀)
rtMultiThreaded 0 : Multi-threaded (/MT)
rtMultiThreadedDebug 1 : Multi-threaded Debug (/MTd)
rtMultiThreadedDebugDLL 3 : Multi-threaded Debug DLL (/MDd)
rtMultiThreadedDLL 2 : Multi-threaded DLL (/MD)
有关 MT / MD 的更多信息可在此处找到:/MD, /MT, /LD (Use Run-Time Library)
我正在使用 VS 2019 构建一个 Windows 可执行文件。当我 运行 它在我的机器上时,它可以工作,但我不能 100% 确定它是否适用于最终用户没有 vc_redist.x64.exe
2019 版。(尤其是 Win7 用户 - 它处于用户仍在使用此版本的利基市场)。
如何静态 link 一切,以便最终用户永远不会被要求下载和安装 Visual C++ Redistributable "vc_redist"?
我正在使用 msbuild.exe
,没有使用 IDE。 要在 .vcxproj
文件或 .cpp
文件中添加哪个设置来启用完全静态 linking,以防止需要 vcredist?
我的 .cpp 代码需要这些库:
#pragma comment(lib, "comctl32.lib")
#pragma comment(lib, "winmm.lib")
示例 .vcxproj:
<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.default.props" />
<PropertyGroup>
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ItemGroup>
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="main.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Targets" />
</Project>
注意:它是 link 与主题 How to deploy a Win32 API application as an executable 一起编辑的,但这里是关于直接从 .vcxproj
文件和 没有 [=36] =] IDE.
为编译配置添加特定的 ClCompile 属性:
<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
</ItemDefinitionGroup>
</Project>
可能的值在这里:runtimeLibraryOption 枚举 (去掉“rt”前缀)
rtMultiThreaded 0 : Multi-threaded (/MT)
rtMultiThreadedDebug 1 : Multi-threaded Debug (/MTd)
rtMultiThreadedDebugDLL 3 : Multi-threaded Debug DLL (/MDd)
rtMultiThreadedDLL 2 : Multi-threaded DLL (/MD)
有关 MT / MD 的更多信息可在此处找到:/MD, /MT, /LD (Use Run-Time Library)