gcc常用指令及相关知识

1,gcc与g++的问题:

1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序。

2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接。

当我们常规使用gcc编译一个程序时,他通常执行4个步骤:预编译,编译,汇编,连接.

当然我们可以通过指定某个选项来使它停止在某个步骤上.

指定GCC进行的操作的选项

-E :让GCC仅进行预处理;得到 .i 文件;

-S :让GCC仅进行预处理,编译;得到 .s 文件;

-c :让GCC仅进行预处理,编译,汇编;得到 .o 文件;

-o Ouput:指定输出文件,让GCC仅进行预处理,编译,汇编,连接;得到 可执行文件(默认为a.out);

控制输出信息

-w:禁止输出所有警告信息

-Wall:输出所有警告信息

-Werror:将所有警告信息当成错误信息输出。

调试相关选项(生成调试信息)

-g:生成用于GDB调试程序使用的调试信息

-p:生成用于prof程序使用的调试信息

-pg:生成用于gprof程序使用的调试信息

程序优化选项

-O,-O1:初步优化(会占用更多时间进行编译,但是编译后的程序运行时占用的内存更少)

-O2:比-O1更进一步优化

-O3:比-O2更进一步优化

-O0:不进行优化

宏操作

-D name:定义宏name的值为1,类似在源程序中使用#define name 1

-D name=val:定义宏name的值为val,类似#define name val

-U name:取消宏name的定义,类似#undef name

-undef:取消所有系统指定或GCC指定的宏定义,但保留标准预定义的宏

指定搜索目录

-I dir,-Idir:追加目录dir到头文件的搜索路径中

-L dir,-Ldir:追加目录dir到库文件的搜索路径中

-Bprefix:指定gcc查找库文件,头文件,数据文件的目录

指定使用的库文件,头文件

-nostdinc:不使用标准头文件(默认在/usr/include)

-nostdlib:不使用标准库文件(默认在/usr/lib)

-l library:指定使用的库文件,默认gcc在编译一个程序时只连接到标准c库 上,是用该选项能够使他连接到指定的库上,例如若你要连接到数学库上(libm.a)则你只须指定 -lm就可以了。也就是说这个选项指定连接的库文件可以将前缀lib和后缀.a(或.so)省略。

-nostartfiles:不使用标准的系统的startup文件

指定连接库文件的方式

-shared:动态连接到库文件上,这是默认行为。

-static:静态连接到库文件上

注:动态连接和静态连接的区别在于:动态连接是在程序运行时才连接到库文件上(也就是需要用到时才连接上),而静态连接则是在编译时就将程序连接到库文件中(这样做会增大程序,但便于移植)

备注:

-选项 -Wall 开启编译器几乎所有常用的警告──强烈建议你始终使用该选项。编译器有很多其他的警告选项,但 -Wall 是最常用的。默认情况下GCC 不会产生任何警告信息。当编写 C 或 C++ 程序时编译器警告非常有助于检测程序存在的问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一阶段 Linux快速入门掌握Linux常用操作命令 第一讲 Linux介绍 知识点1: Linux发展简史与黑客文化 知识点2: 安装Linux系统, 以Ubuntu虚拟机为例 知识点3: 购买Linux云主机,以阿里云主机为例 知识点4: Linux目录结构及常用命令 实战项目: 安装Linux虚拟机环境,配置网络及共享文件 第二讲 Linux常用操作命令 知识点1: ls、cd、pwd、cat、mkdir 知识点2: PATH环境变量以及常用快捷键 知识点3: 用户与用户组,useradd、groupadd 知识点4: 文件属性与权限操作,chmod、chown 知识点5: find 与 grep:搜索神器find命令基本用法 知识点6: tar命令 知识点7: ssh和sshd 实战项目: ssh登陆到你的Linux系统,使用find、grep、tar常用命令解决具体问题 第二阶段 Linux开发基础与shell编程 第三讲 Linux代码编辑器 知识点1: VIM的基本用法 知识点2: VS Code 简介 实战项目: 安装Vim 和 VS Code,配置环境,配置或安装插件支持C、shell、Makefile 语法高亮 第四讲 Linux Shell编程 知识点1: Shell简介(What, Why, How) 知识点2: Shell 基础语法(变量、条件、循环、函数、库) 知识点3: 实例场景(Hello World,猜数字,文件读写,网络侦测) 实战项目: LInux服务器自动监控 第五讲 Linux开发基础 知识点1: 用C语言写一个hello word程序 知识点2: GCC与GDB 简介 知识点3: 工程文件Makefile 知识点4: 编译安装软件,找一个软件 实战项目: C语言实现一个简单的命令行系统 第三阶段 实战Linux网络与运维 第六讲 Linux网络基础 知识点1: 计算机网络基础 知识点2: ifconfig 知识点3: 网络测试命令:主机 ping/ 本机端口:netstat/ 嗅探器 nmap 知识点4: 通俗理解iptables 实战项目: Linux 防火墙实战配置 第七讲 HTTP网络服务 知识点1: HTTP基础 知识点2: LNMP 架构服务搭建 知识点3: Nginx 配置 知识点4: MySQL 配置 知识点5: PHP 简介 实战项目: 基于WordPress 搭建个人博客 第八讲 Linux运维基础 知识点1: Linux系统监控 相关命令:iostat/free/top/dstat/iotop 知识点2: Linux自化运维 实战项目: 使用Docker自动部署zabbix运维系统,实时监控服务器性能 第四阶段 Linux系统构建 第九讲 Linux系统构建 知识点1: Linux内核源代码简介 知识点2: Linux内核的编译 知识点3: Linux系统的构建 实战项目: 自行编译构建一个Linux系统 第十讲 Linux操作系统常见试题解析

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值