Linux系统学习笔记二
参考课程: 基于VSCode和CMake实现C/C++开发 | Linux篇_哔哩哔哩_bilibili
1、文件编辑器
vim:是所有Unix和Linux系统下标准的文件编辑器
gedit:Linux系统下的纯文本编辑器,可视化后类似于Windows系统中的记事本
touch linux2.txt
sudo gedit linux2.txt
nano:使用起来比vim简单的文本编辑器,可直接编辑,且使用该命令打开文件后,文件的下端有操作提示符,使用起来非常简单
nano linux2.txt
2、编译器和调试器的安装
gcc和g++分别是GNU的c和c++的编译器,gdb是Unix系统的调试工具
sudo apt-get update
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install build-essential gdb # 该命令可同时安装gcc g++及gdb# 查看安装版本
gcc --version
# 输出
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.g++ --version
# 输出
g++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.gdb --version
# 输出
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
CMake安装可以参考我之前的博客:Ubuntu安装Cmake记录_Cassiel_cx的博客-CSDN博客
或直接安装
sudo apt-get install cmake
cmake --version
# 输出
cmake version 3.23.3CMake suite maintained and supported by Kitware (kitware.com/cmake).
3、编译过程
预处理->编译->汇编->链接 (生成可执行程序)
vscode通过调用gcc和g++编译器来编译c/c++程序
mkdir testcpp
touch test.cpp
sudo gedit test.cpp# test.cpp
# include <iostream>
using namespace std;int main()
{
cout << "Hello World" << endl;
return 0;
}
预处理 (输出 .i 文件)
将所有的#define删除,并且展开所有的宏定义;处理所有的条件预编译指令,比如#if、#ifdef、#elif、#else、#endif等;处理#include预编译指令,将被包含的文件直接插入到预编译指令的位置;删除所有的注释;添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号;保留所有的#pragma编译器指令,因为编译器需要使用它们。
# -E表示编译器只预处理输入文件
g++ -E test.cpp -o test.i
编译 (输出 .s 文件)
扫描->语法分析->语义分析->源代码优化->代码生成->目标代码优化
# -S表示g++为代码产生汇编语言后停止编译
g++ -S test.i -o test.s
汇编 (输出 .o 文件)
将 .s 文件翻译成机器语言指令,把这些指令打包成可重定位目标程序格式
# -c表示g++仅把代码编译为机器语言的目标代码
g++ -c test.s -o test.o
链接 (输出二进制文件)
生成可执行目标文件
g++ test.o -o test
以上四步汇总
g++ test.cpp -o test
在 Linux 系统中,绿色代表可执行文件
4、g++ 重要编译参数
-O[num]:g++对代码进行优化
-O0 表示不做优化
-O1 表示默认优化
-O2 表示除了完成-O1的优化以外,还进行一些额外的调整工作
-O3 表示包括循环展开和其他一些与处理特性相关的优化工作
-l:用于指定程序链接的库,后面紧跟着的就是库名。注意,需在/lib,/usr/lib和/usr/local/lib里面的库才能被-l链接
-L: 指定库文件路径,后面紧跟着库文件所在的目录名
-I:指定头文件搜索目录
-Wall:打印警告信息
-w:关闭警告信息
-std=c++11:设置编译标准
-o:指定输出文件名,若不指定,则默认生成a.out
-D:定义宏,如:-DDEBUG
# include <iostream>
# include <stdio.h>
using namespace std;int main()
{
# ifdef DEBUGprintf("Debug\n");
# endif
}
g++ -DDEBUG test.cpp -o test
./test# 输出
Debug
man:查看指令使用手册,如:man gcc
Linux系统学习笔记二相关推荐
- linux系统学习笔记6——debian系统分屏操作(亲测)
debian系统分屏 刚插上HDMI链接屏幕后,发现两个屏幕是复制的效果 `步骤` xrandr | grep connecteda 1.查看现有的屏幕型号 由上图可以看到,一个是eDP-1 分辨率1 ...
- linux中ftp的工作原理,Linux系统学习 十二、VSFTP服务—简介与原理
1.简介与原理 互联网诞生之初就存在三大服务:WWW.FTP.邮件 FTP主要针对企业级,可以设置权限,对不同等级的资料针对不同权限人员显示. 但是像网盘这样的基本没有权限划分. 简介: FTP(Fi ...
- linux系统学习笔记9——CANOpen状态转换
CANopen CANopen状态转换 CANopen状态转换 从节点上电和内部初始化之后自动进入预损作状太(Pre-operational State),在进入预操作之前,发送标准的启动对象(Boo ...
- linux系统学习笔记8——LiuxCNC镜像系统安装步骤
前言 LinuxCNC系统安装 有几个问题可能会遇到需要避免 1 .电脑系统启动模式 boot mode 需要修改成 legancy2.如果是将硬盘分区,那么安装linuxcnc系统镜像的分区最好在前 ...
- 最全Linux系统学习笔记--持续更新
1.shell语法 命令 选项 参数 命令:整条shell命令的主体 选项:会影响会微调整个命令的行为 参数:命令作用的对象 1.自动补全 2.快捷键 ctrl+C:终止前台运行的程序 ctrl+D: ...
- Linux系统学习笔记:文件描述符标志
文件描述符标志的概念 文件描述符标志(目前就只有一个close-on-exec): 它仅仅是一个标志,当进程fork一个子进程的时候,在子进程中调用了exec函数时就用到了这个标志.意义是执行exec ...
- linux硬件控制流,Linux系统学习笔记:异常控制流
程序计数器中指令的地址的过渡称为控制转移,控制转移的序列称为处理器的控制流.最简单的是平滑流.跳转.调用和返回等指令会造成平滑流的突变,来对内部的程序状态中的变化做出反应.系统也需要能够对系统状态的变 ...
- linux系统中运行软件,Linux系统学习笔记:运行程序
为了理解程序运行时计算机做了什么,有必要了解一下计算机的硬件组成.下图给出了计算机的一个硬件组成抽象. 系统的硬件组成 总线是贯穿整个系统的一组电子管道,它携带信息字节并负责在各部件之间传递,一般传递 ...
- linux系统学习(二)
文件,目录 pwd:查看当前目录 Print Working Directory cd,ls(ll),mkdir -p Change Directory List Make Directory du ...
最新文章
- 【AI】caffe使用步骤(四):训练和预测
- Python 3.6 安装 Shapely
- lua学习笔记之日期时间
- div中直接绑定富文本值
- leetcode 1631. 最小体力消耗路径(并查集)
- html自动按键,VBS脚本和HTML DOM自动操作网页
- getSystemService
- ec11编码器c语言程序,EC11编码器识别程序——有时不准确,请达人指点
- data-index在react里怎样表达_对牛弹琴,在英语里该怎样地道表达?
- android编程歌词显示,Android 音乐播放器实现歌词显示
- xshell 上传文件
- 卡迪夫大数据专业排名_大数据分析:英国哪个大学在国内知名度最高
- 用户DSN、系统DSN、文件DSN的区别
- python之函数习题
- 腾讯互娱PHP怎么样,还原最真实的NBA:专访腾讯互娱《最强NBA》
- CCF CSP 201809-1 卖菜 题解
- 机器学习代码学习(一)-first-dichotomy
- 【C语言编程4】输入年份输出全年日历
- 压敏电阻器的结构原理及参数 (tvs,气体管,防雷击)
- 计算机网络的性能指标:带宽,时延,吞吐量,速率等