Linux gcc编译器
GNU CC(通常称为GCC)是GNU项目的编译器,他能够编译C、C++语言编写的程序。
使用gcc,程序员可以对编译过程有更多控制,编译过程分为3个阶段。
--预处理
--汇编
--链接
程序员可以在编译的任何阶段结束后体质整个编译过程以检查编译器在该阶段输出的信息
使用gcc,程序员可以控制生成二进制执行文件中调试代码的数量和类型。
和其他编译器一样,gcc也可以优化执行代码
gcc是个交叉平台编译器,所有能够在当前CPU平台上为不同操作系统开发软件
gcc对C和C++进行了一些扩展,有助于提高执行效率以及编译器进行代码优化。
gcc可以让跨平台编程更加容易,将第代码移植代价。
在命令行键入命令编译和运行这段程序--gcc -o hello hello.c
这行命令告诉gcc对源程序hello.c进行编译和链接,并使用参数-o指定创建名为hello的可执行程序。
"-o"设置输出的文件名
整个过程看上去仿佛一气呵成,但其实是分几步的
--预编译源代码
--编译目标代码
--链接程序
预编译
--在命令行键入命令
gcc -o hello1.c - E hello.c
这行命令告诉gcc对源程序hello.c进行预编译,预编译结果输出到hello1.c文件中
"-E"表示预编译
--预编译:将头文件的内容加载到hello.c文件中,形成新的文件hello1.c
编译
--在命令行键入命令
gcc -o hello.o -c hellol.c
这行命令告诉gcc对源程序hello.c进行编译,但不链接,编译输出到hello.o文件中。
--编译:将预编译好的文件编译成二进制代码,此时代码中各个库函数的实现还没有,所以这个.o文件无法执行
--"-c"命令也可以直接将源文件hello.c编译成.o文件的,不一定需要预编译过的文件
链接
--在命令行键入命令
gcc -o hello hello.o
这行命令告诉gcc对源程序hello.o进行连接,生成可执行的hello
--链接:把程序需要用到的库文件加载进来,形成可执行文件
--注意:链接可以同时链接多个文件,例如:gcc -o hello hello.o add.o


开启所有警告
--在命令行键入命令
gcc -o hello.o -c hello.c -Wall
这行命令告诉gcc对源程序hello.c进行编译的同时,打印出警告信息


编译C++源文件
--我们把hello.c文件改名为hello.cpp
gcc -o hello.o -c hello.cpp --gcc没有报错
gcc -o hello hello.o --gcc报错,说明是链接库的时候出错了
--gcc默认只链接c的标准库,并不链接c++标准库
在命令行键入命令:gcc -o hello hello.cpp -lstdc++ --编译成功
--备注 -l是gcc的参数,表示链接指定的库文件 stdc++是c++的库文件libstdc++.so的简写,两者之间不加空格
如果需要链接多个库文件;语法是:gcc -o hello hello.cpp -lstdc++ -lstdc++ -lstdc++
--但是我们编译c++一般不使用gcc,而是使用g++
gcc编译选项 -D 代表一个宏,等同于在C语言中定义#define
例如 gcc -Wall -DWIN -o hello.o -c hello.c --"-DWIN"等同于#define WIN
Linux gcc编译器的更多相关文章
- <转载>linux gcc编译器中使用gdb单步调试程序,程序不是顺序执行的。
原文地址http://blog.csdn.net/abc78400123/article/details/6779108 在用gdb调试,使用s 或n单步执行程序时,发现程序不是按顺序运行的,有时莫名 ...
- Linux安装gcc编译器详解
本人使用的是CentOS 6.5 64位系统,由于在安装系统的时候并没有勾选安装gcc编译器,因此需要自行安装gcc编译器. 使用yum安装gcc 对于配备了yum的Linux发行版而言,安装gcc编 ...
- Linux环境下的GCC编译器与GDB调试工具介绍
假如现在我们有如下代码需要编译运行和调试.文件名为:test.c #include <stdio.h> int main() { int day, month, year, sum, le ...
- Linux系统(本例以Ubuntu18.04为例)安装GCC编译器
Linux(本例以Ubuntu18.04为例)安装GCC编译器 一.安装 安装命令:sudo apt-get build-dep gcc 遇到 您希望继续执行吗? [Y/n] y 直接输入y回车即 ...
- linux应用之gcc编译器的安装及使用
gcc是linux系统下功能十分强大的编译器. 本人使用的是CentOS 6.6 64位系统,由于在安装系统的时候并没有勾选安装gcc编译器,因此需要自行安装gcc编译器. 使用yum安装gcc 对于 ...
- Linux下GCC编译器的安装
通过apt-get方式下载的Qt5.9的gcc编译器版本只是4.8.3,无法打开一些Qt5的库头文件,所以准备在Llinux下再安装一个gcc5.3.0. 查看gcc版本 ubuntu下查看gcc的版 ...
- Linux安装GCC编译器
今天突然想到怎么样在Red Hat 8上练习C,安装GCC编译器,并运行出"hello world". 于是就有了以下操作 1 [root@localhost ~]# yum in ...
- 在CentOS 7.2下升级gcc编译器的版本
默认情况下,CentOS 7.2预装的gcc版本是4.8.x,通过执行命令 gcc -v 可以看到,一般情况下这个版本的编译器已经满足需要了,但是某些特殊的时候为了支持C++更高的特性,需要对gcc编 ...
- Linux gcc 编译日记
gcc 编译器是众多编译器组合入口,例如在编译 .cpp 文件时,使用c++ 编译器,编译.c 文件时,使用c编译器. 在编译c++程序时, 库文件与头文件可通过 -L[dir] 指定库目录 , -l ...
随机推荐
- javascript设计模式 第一章 灵活的javascript
javascript 设计模式 第1章 灵活的语言--JavaScript 初级程序员接到一个验证表单功能的任务,需要验证用户名.邮箱.密码等 ** 此文章内容大部分来自 <javascript ...
- Firefox中好用的几个快捷键
对于一些经常用FF(firefox)上网的朋友来说, 怎样加快上网的操作速度呢, 使用Firefox快捷键是很好的方法. 本人也经常遇到一些Firefox的很好的快捷键,现在我来告诉大家Firefox ...
- 【java】子类可以通过调用父类的public方法调用父类的private方法,为什么?
代码1: 打印结果: 代码2: 运行结果: 问题: 代码1中super是父类自己调用自己的add()方法,并在add()方法中调用了私有的del()方法,那为什么打印出来的this是子类? 代码2中t ...
- Ext js 应用例子
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- ArrayAdapter、SimpleAdapter和BaseAdapter示例代码
import android.content.Context; import android.util.Pair; import android.view.View; import android.v ...
- 【转】angular中$parse详解教程
原文: https://yq.aliyun.com/ziliao/40516 ------------------------------------------------------------- ...
- Docker默认存储路径修改
Docker默认存储路径: # docker info...... Data loop file: /var/lib/docker/devicemapper/devicemapper/data.... ...
- Ubuntu(Debian)的aptitude与apt-get的区别和联系
Ubuntu(Debian)的aptitude与apt-get的区别和联系 aptitude 与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具.与 apt-get 不 ...
- A.0 B.1 C.2 D.3
17. 以下哪个不是广告平台? A.Admob B.Domob C.InMobi D.TalkingData 错误 应该选择:D.TalkingData 10. 哪个不是免费的工具? A.Xcode ...
- 我对GFWed的一些自己的见解
首先来听听维基百科对GFWed的说明 防火长城(英语:Great Firewall of China.经常使用简称:GFW,中文也称中国国家防火墙或防火长城[1],中国大陆民众俗称防火墙[2].功夫网 ...