CLion2018编译C程序仍依赖VC++2015,求教C程序外部依赖问题
首先明确回答你:C语言编写的可执行文件完全可能存在外部依赖,不是说用C写就自带“无依赖buff”,这主要取决于你用的编译工具链、链接方式,以及代码里用到的功能。
常见的外部依赖类型
C标准运行时库
这是最常见的依赖,比如你遇到的vcruntime140.dll就属于MSVC(微软Visual C++)工具链的C运行时组件。CLion默认如果配置了MSVC编译器(因为你之前用VS2015,可能CLion自动识别了这个工具链),即使是C代码,默认也会动态链接MSVC的运行时库——这样生成的exe就需要目标系统上有对应的VC++ Redistributable包(也就是你说的Visual C++2015)。
另外如果用MinGW工具链,可能会依赖libgcc_s_dw2-1.dll、libstdc++-6.dll这类MinGW的运行时DLL,同样是动态链接导致的。Windows系统核心DLL
几乎所有Windows平台的程序都会依赖这类系统自带的DLL,比如kernel32.dll(负责进程、内存管理)、user32.dll(窗口、UI相关)、advapi32.dll(系统API调用)。这些一般不需要额外安装,因为Windows系统本身就自带,除非是非常老旧的系统版本。第三方库依赖
如果你的代码里用到了第三方库(比如数据库、网络、图形库等),并且编译时选择了动态链接这些库,那么生成的exe也会依赖对应的第三方DLL文件。
针对你当前问题的解决思路
既然你想摆脱vcruntime140.dll的依赖,可以试试这两个方案:
静态链接MSVC运行时库
在CLion的编译配置里,把运行时库选项改成静态链接:- Release模式下,添加编译参数
/MT - Debug模式下,添加编译参数
/MTd
这样编译器会把MSVC的运行时库代码直接打包进你的exe里,不需要目标系统再装VC++ Redist了。
- Release模式下,添加编译参数
切换到MinGW工具链
在CLion中配置MinGW作为编译工具链,然后编译时选择静态链接MinGW的运行时库(一般可以通过编译参数-static实现),这样生成的exe通常只依赖Windows系统自带的核心DLL,不需要额外安装其他库。
内容的提问来源于stack exchange,提问作者user9411840

