命令行编译C程序

news2024/11/15 11:19:28

目录

设置MSVC环境变量

C文件编译流程

编译

链接


学习起步之初,先用最基础的命令行工具进行学习

设置MSVC环境变量

这个是在VS2019下进行配置的,位置和你安装IDE的位置有关

MSVC
D:\VS2019\IDE\VC\Tools\MSVC\14.29.30133

WK10_INCLUDE
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0

WK10_LIB
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0

WK10_BIN
C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0

INCLUDE
%WK10_INCLUDE%\ucrt;%WK10_INCLUDE%\um;%WK10_INCLUDE%\shared;%MSVC%\include;

LIB
%WK10_LIB%\um\x64;%WK10_LIB%\ucrt\x64;%MSVC%\lib\x64;


Path下新增
%MSVC%\bin\HostX64\x64
%WK10_BIN%\x64

验证环境配置

 

C文件编译流程

说明:

  1. C文件进行预处理,进行宏替换,生成 .i 后缀文件
  2. 进行编译,编译为机器码,是一堆二进制数据,文件后缀为 .obj
  3. 链接,将二进制机器码,转换成二进制语言的可执行程序,exe等可执行文件

编译

执行下面的命令,会产生一个obj文件,存储了c代码的机器代码以及所需的数据支撑和代码支撑

cl /c Hello.c

这个obj文件不能直接运行,只是高级语言转化为低级语言,而且是可以跨语言的,不能跨平台。

obj文件不能直接执行,虽然里面包含的是机器代码,要想执行需要和操作系统约定,比如:代码执行位置,数据执行位置,程序的入口

另外编译器有严格审查机制,可以设置,从1-4,从弱到强、

cl /c /W(1-4) /P Hello.c

查看替换之后结果,会生成一个.i的文件,W4最高检查标准

cl /c /W4 /P Hello.c

打开Hello.c

这个文件就是把include,宏给替换之后的结果,还未编译

 

链接

抽取代码以及数据,打造为当前平台的可执行程序

link命令用于将目标文件、库文件和其他资源文件链接在一起生成可执行文件、动态链接库(DLL)或静态库。你可以使用link命令将名为Hello.obj的目标文件链接为可执行文件。

link Hello.obj

原来的obj也就3kb,经过打包后直接犯了40倍,生成Windows平台的可执行文件

发现winodws平台对大小写其实是不敏感的

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/677226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android App安装弹窗显示流程

一、APP的安装 1、常见安装方式 系统应用和预制应用安装――开机时完成,没有安装界面,在PKMS的构造函数中完成安装 网络下载或第三方应用安装――调用PackageManager.installPackages(),有安装界面。 ADB工具安装――没有安装界面&#xf…

社交登陆成功回调

1. 点击跳转至第三方授权 2. 这是使用gitee作为第三方授权进行验证 3. 授权成功则跳转至 redirect_url 4. 社交登陆回调逻辑 一、根据第三方授权提供的方式获取token (1)发送请求获取code码(每次发送请求,code码会改变&#xff…

构建安全架构的 Azure 云:深入了解零信任体系结构

文章目录 前言一、零信任安全模型的概念以及背景介绍二、传统安全模型(边界模型)三、零信任模型(现阶段主流云厂商策略)四、Azure 中的零信任体系结构(本文重点)4.1 基础知识点(必须了解&#x…

File 类,InputStream, OutputStream 的用法

目录 一.File类 关于名字和路径的操作 关于创建和销毁的操作 创建文件夹(多级目录) InputStream 第一种:字节流读取 第二种: 字符流读取(Reader) OutputStream 第一种:字节流写入 第二种方式:字符流输入 一.File类 File翻译过来"文件" 那么File类的操作实际…

【初识 Docker | 中级篇】 Docker 安装 Redis

文章目录 前言一、安装 docker1、安装docker2、安装docker-compose 二、redis 单机安装1.创建配置文件1.1.创建目录1.2.创建redis.conf1.3.创建docker-compose.yml 2.启动redis容器 总结 前言 可以按照以下步骤在 Docker 中安装 Redis docker pull redis 拉取Redis镜像 docker…

CSS3-定位

网页常见布局方式 1 标准流 1 块级元素独占一行 → 垂直布局 2 行内元素/行内块元素一行显示多个 → 水平布局 2 浮动 可以让原本垂直布局的 块级元素变成水平布局 3 定位 1 可以让元素自由的摆放在网…

软件项目管理 第五章 软件项目的成本管理 课后习题参考答案——主编:李冰、张桥珍、刘玉娥

第五章 软件项目的成本管理 课后习题参考答案 1.选择题 (1)(A)是用系统的功能数量来测量其规模,与实现产品所使用的语言和技术是没有关系的。 A.功能点 B.对象点 C.代码行 D.用例点 (2)如果你是某项目的项目经理,你已经估…

easyX库文字输出相关函数(注释版)

您好这里是limou3434的博文系列,感兴趣的话可以看看我的其他系列。 本次我给您带来的是easyX库的字符输出系列函数,祝您看得开心。 0.文字输出函数概览 函数或数据类型描述LOGFONT文字样式的结构体。settextcolor设置当前文字颜色。settextstyle设置当…

Altium Designer VS CADENCE 颜色配置

最近公司要求用CADENCE画图,对于我这个用了10年以上AD的老玩家来说,真的是很不想接受,虽然AD有版权问题,据说也容易收到律师函,但还是不想更换,毕竟用了10年了,感情、熟练程度摆在那里。没办法&…

继承的基本内容

在面向对象部分提到过,面向对象三大特性(不是只有三个特性,而是指存在感最强的三个特性):封装,继承,多态。 封装:对比C语言,将数据和处理数据的方法放入一个类中&#xf…

【算法总结】——组合型回溯

文章目录 组合型回溯例题1——组合从输入考虑模板从答案考虑模板 例题2——括号生成解法一解法二 剪枝分析回溯时间复杂度的通用方法 组合型回溯 组合型和子集型之间的差异在哪里呢? 相比子集问题,组合问题是可以做一些额外的优化的(因为只…

Linux模块文件编译到内核与独立编译成.ko文件的方法

很多粉丝在群里提问,如何把一个模块文件编译到内核中或者独立变异成ko文件。本文给大家详解讲解。 1. 内核目录 Linux内核源代码非常庞大,随着版本的发展不断增加。它使用目录树结构,并且使用Makefile组织配置、编译。 初次接触Linux内核&…

Visual Studio 2022写Windows程序造成CPU占用率过高故障排除

我是荔园微风,作为一名在IT界整整25年的老兵,今天针对Visual Studio 2022写Windows程序造成CPU占用率过高故障进行排除。 下面是一个标准的Windows程序,也可以说是经典程序了,但是这个程序一运行,WinMain.exe的CPU占用…

Android 13(T) - binder阅读(2)- ServiceManager的启动与获取

1 ServiceManager的启动 1.1 服务的启动与注册 上一篇笔记中有说到,ServiceManager是一个特殊的binder service,所以它和普通的service一样需要打开binder驱动,在驱动中创建一个属于ServiceManager进程的binder_proc。 int main(int argc,…

django中发送get post请求并获得数据

django中发送get post请求并获得数据 项目结构如下注册路由 urls.py在处理函数中处理请求 views.py进行 get的请求01浏览器 get请求传参数02服务器django get参数解析获取01浏览器 post的发送浏览器get 请求 获取页面返回的 form 发送post请求 带参数 02服务器django的post请求…

【Unity3D】平面光罩特效

1 前言 屏幕深度和法线纹理简介中对深度和法线纹理的来源、使用及推导过程进行了讲解,激光雷达特效中讲述了一种重构屏幕像素点世界坐标的方法,本文将沿用激光雷达特效中重构像素点世界坐标的方法,实现平面光罩特效。 假设平面光罩的高度为 s…

SpringCloud Alibaba入门7之引入服务网关Gateway

我们需要在客户端和服务端之间加一个统一的入口,来作为请求的统一接入,而在微服务的体系中,承担这个角色的就是网关。我们只需要将网关的机器IP配置到DNS,或者接入负载,那么客户端的服务最终通过我们的网关,再转发到对…

GEE:欧几里得距离——计算目标图像中每个像素到目标像素的距离

作者:CSDN @ _养乐多_ 利用欧几里得距离计算目标图像中每个像素到目标像素的距离,以量化像素与目标的接近程度。 结果如下图所示, 文章目录 一、欧几里得距离简介二、代码一、欧几里得距离简介 欧几里得距离(Euclidean distance)是在数学中常用的一种距离度量方式,用于…

Android PMS APP安装流程

仓库网址:http://androidxref.com/9.0.0_r3/xref/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java 一、PMS安装APP流程图 二、文件复制 PMS处理安装HandlerParams安装参数流程图 PackageManagerService.java#installStage…

职场求生记|唐朝打工人如何绝地求生

📚书名:《长安的荔枝》 ✏️作者:马伯庸 作为“见微”系列神作,其在微信读书总榜的第一名位置持续一段时间了,其讲述的内容和每个人都息息相关,更是能引起职场人的无限共鸣,值得深思。 ⭐故事…