面试官问Linux下如何编译C程序,如何回答?为你编译演示
文章来源:嵌入式大杂烩
作者:ZhengNL
Windows下常用IDE来编译,Linux下直接使用gcc来编译,编译过程是Linux嵌入式编程的基础,也是嵌入式高频基础面试问题。
一、命令行编译及各个细分编译过程
hello.c示例代码:
#include<stdio.h>
intmain(void)
{
printf("Hello world\n");
return0;
}
编译:
gcc hello.c -o hello
如有必要,还需回答出细分的几个步骤:
gcc -E hello.c -o hello.i # 预处理阶段
gcc -S hello.i -o hello.s # 编译阶段
gcc -c hello.s -o hello.o # 汇编阶段
gcc hello.o -o hello # 链接阶段
具体细节可查往期笔记:《C程序编译过程》
二、借助make来编译
少量文件时可以使用上面方法编译。源码文件较多时,可借用make工具。make通过解析Makefile文件来执行一些gcc命令进行编译。
首先得创建一个Makefile文件,如:
hello:hello.c
gcc hello.c -o hello
编译运行:
上面更细分编译过程的Makefile文件如下:
关于make及Makefile更多内容可查阅:
【Linux笔记】make工程管理工具(一)
【Linux笔记】make工程管理工具(二)
三、借助CMake生成Makefile
实际开发很少会像上面一样自己编写Makefile文件,可借助cmake工具来生成。
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。
1、命令行操作
首先输入cmake --version命令查看cmake版本,若还没安装则执行如下命令安装:
sudo apt install cmake
下面开始实验演示。我们的cmake_test文件夹下有一个hello.c文件,在同文件夹下创建一个CMakeLists.txt文件:
输入如下内容:
cmake_minimum_required (VERSION 3.10.2)
project (cmake_test)
add_executable(cmake_test hello.c)
然后在cmake_test目录下依次输入如下命令生成Makefile文件:
mkdir build # 创建build文件夹
cd build # 进入build文件夹
cmake ../ # 在cmake_test文件夹下生成Makefile
执行结果如下:
关于CMakeLists.txt文件具体语法感兴趣的朋友可自行查阅资料进行学习。
2、使用cmake-gui
上述是在命令行下使用cmake生成Makefile进行进行编译的方法。我们也可以使用图形化界面来生成Makefile文件。cmake-gui是cmake的一个图形化工具。下面依旧以实例作为演示。
我们把上一小节的CMakeLists.txt与hello.c文件放入新创建的文件夹cmake-gui_test中:
在终端输入cmake-gui命令启动cmake-gu图形化工具。若未安装可输入如下命令进行安装:
sudo apt install cmake-qt-gui
如:
启动cmake-gui:
查看cmake-gui_test文件夹:
编译运行:
以上分享了一些编译的过程及方法,都是基础内容,需要熟练掌握。如果觉得文章对你有帮助,可以从原文渠道转发~

面试官问Linux下如何编译C程序,如何回答?为你编译演示的更多相关文章
- RabbitMQ系列(六)--面试官问为什么要使用MQ,应该怎么回答
如果简历中有写到使用过RabbitMQ或者其他的消息中间件,可能在MQ方面的第一个问题就是问:为什么要使用MQ 面试官期望的回答 1.项目中有什么业务场景需要用到MQ 2.但是用了MQ,会带来很多问题 ...
- 【Nginx】面试官问我Nginx能不能配置WebSocket?我给他现场演示了一番!!
写在前面 当今互联网领域,不管是APP还是H5,不管是微信端还是小程序,只要是一款像样点的产品,为了增加用户的交互感和用户粘度,多多少少都会涉及到聊天功能.而对于Web端与H5来说,实现聊天最简单的就 ...
- 面试官问你如何解决web高并发这样回答就好了
所谓高并发,就是同一时间有很多流量(通常指用户)访问程序的接口.页面及其他资源,解决高并发就是当流量峰值到来时保证程序的稳定性. 我们一般用QPS(每秒查询数,又叫每秒请求数)来衡量程序的综合性能,数 ...
- 面试官问:HashMap在并发情况下为什么造成死循环?一脸懵
这个问题是在面试时常问的几个问题,一般在问这个问题之前会问Hashmap和HashTable的区别?面试者一般会回答:hashtable是线程安全的,hashmap是线程不安全的. 那么面试官就会紧接 ...
- 美女面试官问我Python如何优雅的创建临时文件,我的回答....
[摘要] 本故事纯属虚构,如有巧合,他们故事里的美女面试官也肯定没有我的美,请自行脑补... 小P像多数Python自学者一样,苦心钻研小半年,一朝出师投简历. 这不,一家招聘初级Python开发工程 ...
- 「每日一题」有人上次在dy面试,面试官问我:vue数据绑定的实现原理。你说我该如何回答?
关注「松宝写代码」,精选好文,每日一题 时间永远是自己的 每分每秒也都是为自己的将来铺垫和增值 作者:saucxs | songEagle 来源:原创 一.前言 文章首发在「松宝写代码」 2020. ...
- 被面试官问懵:TCP 四次挥手收到乱序的 FIN 包会如何处理?
摘要:收到个读者的问题,他在面试的时候,被搞懵了,因为面试官问了他这么一个网络问题. 本文分享自华为云社区<TCP 四次挥手收到乱序的 FIN 包会如何处理?>,作者:小林coding . ...
- 面试官问我,Redis分布式锁如何续期?懵了。
前言 上一篇[面试官问我,使用Dubbo有没有遇到一些坑?我笑了.]之后,又有一位粉丝和我说在面试过程中被虐了.鉴于这位粉丝是之前肥朝的粉丝,而且周一又要开启新一轮的面试,为了回馈他长期以来的支持,所 ...
- 面试官问:JS的this指向
前言 面试官出很多考题,基本都会变着方式来考察this指向,看候选人对JS基础知识是否扎实.读者可以先拉到底部看总结,再谷歌(或各技术平台)搜索几篇类似文章,看笔者写的文章和别人有什么不同(欢迎在评论 ...
随机推荐
- 浅析 AC 自动机
目录 简述 AC 自动机是什么 AC 自动机有什么用 AC 自动机·初探 AC 自动机·原理分析 AC 自动机·代码实现 AC 自动机·更进一步 第一题 第二题 第三题 从 AC 自动机到 fail ...
- 【Luogu】P1072 Hankson 的趣味题 题解
原题链接 嗯...通过标签我们易得知,这是一道数学题(废话) 其中,题目给了这两个条件: \(gcd(x,a_0)=a_1,lcm(x,b_0)=b_1\) 所以,根据 \(gcd\) 与 \(lcm ...
- 转载-Eclipse无法打开Eclipse MarketPlace的解决办法
问题描述: Eclipse点击 help-->Eclipse MarketPlace 后无任何反应,无报错,打不开 解决方法: 重新安装一下 epp MarketPlace help--> ...
- php 使用 phpword 操作 word 读取 word
思路 1. 加载word文件.2. 循环判断加载出来的数据.( 数据下面有很多个节点 )( 节点是按照数据的类型分类的 例如 无样式的文本是RunText,换行是TextBreak,表格是table. ...
- leetcode129valid-parentheses
题目描述 给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()"和"()[] ...
- 自己常用的Content-Type几种值用法
Content-Type 的值类型: application/json:消息主体是序列化后的 JSON 字符串 这里要注意的是 我在使用webapi,前台使用$.ajax的时候 假如我要传递的数据为 ...
- 内网渗透 day2-nmap和nc的使用
nmap和nc的使用 nmap的使用 1. nmap -sSV 172.16.100.214 -T4 -F -sS进行SYN扫描,是比较隐匿的 -sV探测打开端口的服务的信息 -sSV将上面两种一起使 ...
- tcp输入数据 慢速路径处理 tcp_data_queue_ofo
tcp_data_queue_ofo 在新内核的实现中ofo队列实际上是一颗红黑树.在tcp_data_queue_ofo中根据序号,查找到合适位置,合并或者添加到rbtree中.同时设置dsack和 ...
- lua调用dll demo
使用的是lua5.3 DllMain.cpp 1 //生成的dll 是 lua_add53.dll 2 //luaopen_lua_add 3 extern "C" { 4 #in ...
- 说说基于网络的五种IO模型
# django不是一个异步框架 # tornado是异步的web框架 # 处理每秒大量的请求 # 个人理解的IO:就是应用层与内核驱动层的交互,这个过程无论从应用层到内核中,还是驱动层等待硬件层的数 ...