C/C++编译器GCC下的常用编译命令总结

简介
GCC的意思是GUN C Compiler。经过了多年的发展,GCC已经不仅仅能支持C语言了,它现在还支持Ada语言、C++语言、Java语言、Objective C语言、Pascal语言、COBOL语言,以及支持函数式编程和逻辑编程的Mercury语言等等。而GCC也不再单只是GUN C语言编译器的意思了,而是变成了GUN Complier Collection也即是GUN编译器家族的意思了。另一方面,说到GCC对于操作系统平台以及硬件平台支持,概括起来就一句话:无所不在。

编译
示例程序如下:

  #include <stdio.h> 

  int main(void) {
    printf("Hello World!\n"); 

    return 0;
  }

这个程序,一步到位的编译指令是:

  gcc -o test test.c

实质上,上述编译过程是分为四个阶段进行的:

  1. 预处理(也称为预编译,Preprocessing)
  2. 编译(Compilation)
  3. 汇编(Assembly)
  4. 连接(Linking)

预处理

  gcc -E test.c -o test.i 或 gcc -E test.c

可以输出test.i文件中存放着test.c经预处理之后的代码。打开test.i文件,看一看,就明白了。后面那条指令,是直接在命令行窗口中输出预处理后的代码。

gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果。在本例中,预处理结果就是将stdio.h文件中的内容插入到test.c中了

编译为汇编代码
预处理之后,可直接对生成的test.i文件编译,生成汇编代码:

  gcc -S test.i -o test.s

gcc的-S选项,表示在程序编译期间,在生成汇编代码后,停止,-o输出汇编代码文件

汇编
对于上一小节生成的汇编代码文件test.s,gas汇编器负责将其编译为目标文件,如下:

  gcc -c test.s -o test.o


连接
gcc连接器是gas提供的,负责将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。附加的目标文件包括静态连接库和动态连接库。

对于上一小节中生成的test.o,将其与c标准输入输出库进行连接,最终生成程序test

  gcc test.o -o test

在命令行窗口中执行./test,让它说Hello World!吧

(0)

相关推荐

  • Linux上安装GCC编译器过程

    2004年4月20日最新版本的GCC编译器3.4.0发布了.目前,GCC可以用来编译C/C++.FORTRAN.JAVA.OBJC.ADA等语言的程序,可根据需要选择安装支持的语言.GCC 3.4.0比以前版本更好地支持了C++标准.本文以在Redhat Linux上安装GCC3.4.0为例,介绍了GCC的安装过程. 安装之前,系统中必须要有cc或者gcc等编译器,并且是可用的,或者用环境变量CC指定系统上的编译器.如果系统上没有编译器,不能安装源代码形式的GCC 3.4.0.如果是这种情况,可

  • Microsoft VBScript 编译器错误 错误原因 代码大全

    Microsoft VBScript 编译器错误 错误 '' 缺少语句 ActiveServerPages,ASP0126(0x80004005)-->找不到包含文件 MicrosoftOLEDBProviderforODBCDrivers(0x80040E21)-->sql语句出错(数据类型不匹配或表名(字段名)错误或表处于编辑状态,或表不存在于conn打开的数据库中) MicrosoftOLEDBProviderforODBCDrivers(0x80040E14)-->sql语句出错

  • C/C++ 编译器优化介绍

    0. gcc -o gcc -o 的优化仍然是机械的,想当然的.只有做到深入理解计算机系统,加深对编程语言的理解,才能写出最优化的代码. Linux下gcc 优化级别的介绍  · gcc -o0 ⇒ 不提供任何优化:  · gcc -o1 ⇒ 最基本的优化,主要对代码的分支.表达式.常量等进行优化,编译器会在较短的时间下将代码变得更加短小,这样体积就会变得更小,会减少内存的占用率,在操作系统进行内存调度时就会更快.          · 但是事情没有绝对的优点,当一个庞大的程序被拆碎细分的话,内

  • Microsoft VBScript 编译器错误 错误 '800a03e9' 内存不够的解决方法

    其实出现Microsoft VBScript 编译器错误 错误 '800a03e9' 内存不够的错误一般是由于访问量过大或攻击出现的,而iis进程回收还没有操作,所有我们手工回收一下就可以了. iis >应用程序池 > 找到对应网站的应用程序池 >右键 当然我们可以通过重启iis或重启服务器,在运行里面输入: iisreset /restart

  • C/C++编译器GCC下的常用编译命令总结

    简介 GCC的意思是GUN C Compiler.经过了多年的发展,GCC已经不仅仅能支持C语言了,它现在还支持Ada语言.C++语言.Java语言.Objective C语言.Pascal语言.COBOL语言,以及支持函数式编程和逻辑编程的Mercury语言等等.而GCC也不再单只是GUN C语言编译器的意思了,而是变成了GUN Complier Collection也即是GUN编译器家族的意思了.另一方面,说到GCC对于操作系统平台以及硬件平台支持,概括起来就一句话:无所不在. 编译 示例程

  • linux下shell常用脚本命令及有关知识

    目录 一.需要记住的一些知识点 1.变量类型 2.shell变量说明 3.单引号和双引号和反引号的区别 4.shell转义字符 5. 算术运算符列表 6.关系运算符 7.布尔运算符列表 8. 文件测试运算符列表 二.常用脚本命令举例说明 一.需要记住的一些知识点 1.变量类型 运行shell时,会同时存在三种变量: 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量. 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环

  • window下注册服务的命令小结

    1. 描述:     SC 是用于与服务控制管理器通信的命令行程序 .    用法:  sc <server> [command] [service name] <option1> <option2>... 选项 <server> 的格式为 可以键入 "sc [command]"以获得命令的进一步帮助 命令: query---------------查询服务的状态,或枚举服务类型的状态.           queryex--------

  • linux下使用g++编译cpp工程的方法

    C++编程中相关文件后缀 1.单个源文件生成可执行程序 下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: /* helloworld.cpp */ #include <iostream> int main(int argc,char *argv[]) { std::cout << "hello, world" << std::endl; return(0); } 程序使用定义在头文件 iostream 中的 co

  • Linux下源码编译安装配置SVN服务器的步骤分享

    说明: SVN(subversion)的运行方式有两种: 一种是基于Apache的http.https网页访问形式: 还有一种是基于svnserve的独立服务器模式. SVN的数据存储方式也有两种:一种是在Berkeley DB数据库中存储数据:另一种是使用普通的文件FSFS存储数据. 由于Berkeley DB方式在使用中有可能锁住数据,一般建议使用FSFS方式更安全. 实现目的: 以svnserve的独立服务器模式,使用FSFS数据存储方式源码编译安装配置SVN服务器. 具体操作: 操作系统

  • Linux下将源文件编译成目标文件的过程解析

    简介 请讲一下linux如何源文件逐步编译成可执行文件. 解答 首先先上图对编译的整个过程有个感性的认识,然后再逐步分析各个过程. 以hello.c 程序为例 # include <stdio.h> main{ printf("hello\n"); } 一个.c源程序需要经过预处理器生成.i文件,再经过编译器生成.s文件,再经过汇编器生成可重定位目标文件.o文件,再与其他.o文件经过链接器生成最终的可执行目标程序. 预处理阶段.主要是处理源文件中以"#"

  • linux下使用cmake编译安装mysql的详细教程

    一.安装cmake 1.解压cmake压缩包 [root@mysql tools]# tar -zvxf cmake-2.8.8.tar.gz [root@mysql tools]# ls cmake-2.8.8 cmake-2.8.8.tar.gz mysql-5.5.16.tar.gz scripts 2.解析 [root@mysql tools]# cd cmake-2.8.8 [root@mysql cmake-2.8.8]# ./configure ------------------

  • win10环境下C++ vs2015编译opencv249的教程

    打开CMake,设置源文件路径,和生成路径,第一步我新建的build和buildwin32 我之前用过了,所以这里我另外建了一个文件夹 test来演示. 然后点击Configure,会出现编译器的选项,Visual studio 14 2015生成win32的解决方案,Visual studio 14 2015 win64生成x64的解决方案.这里只演示前一种. 提示 Configuring done,红色的可选项我没有修改过: 3. 接下里点击Generate,提示Generate done.

  • ubuntu下linux常用指令小结

    来实验室将近一个月,几乎没碰window,一直在ubuntu下开发,然后想总结一下最近常用的linux指令. (0) su和sudo:得到root权限 su 切换到root用户 sudo command 切换到root用户,执行command,然后切换回当前用户 su liaohuqiang 切换回普通用户 (1) apt:用于安装软件包 apt list 根据名称列出软件包 apt show 显示软件包细节 sudo apt install 安装软件包 sudo apt remove 卸载软件

  • linux下tomcat常用操作

    假设tomcat安装在/usr/local/tomcat7 启动tomcat cd /usr/local/tomcat7/bin ./startup.sh 查看启动状态 ps -ef|grep java root 3729 1729 6 09:23 pts/2 00:00:03 /usr/lib/jvm/java-8-openjdk-i386//bin/java -Djava.util.logging.config.file=/usr/local/tomcat7/conf/logging.pro

随机推荐