美文网首页
如何编译和运行 C++ 程序?

如何编译和运行 C++ 程序?

作者: LoveSkye | 来源:发表于2019-10-21 21:50 被阅读0次

1. C++程序的后缀

C++ 源文件的后缀则有些混乱,不同的编译器支持不同的后缀,下表是一个简单的汇总:

不同编译器下C++源文件的后缀
总结:从表中看出,除去UNIX系统,使用.cpp作为后缀比较方便。

2. gcc与g++指令

GCC 是由 GUN 组织开发的,最初只支持 C 语言,是一个单纯的 C 语言编译器,后来 GNU 组织倾注了更多的精力,使得 GCC 越发强大,增加了对 C++、Objective-C、Fortran、Java 等其他语言的支持,此时的 GCC 就成了一个编译器套件(套装),是所有编译器的总称。
在这个过程中,gcc 命令也做了相应地调整,它不再仅仅支持 C 语言,而是默认支持 C 语言,增加参数后也可以支持其他的语言。也就是说,gcc 是一个通用命令,它会根据不同的参数调用不同的编译器或链接器。

但是让用户指定参数是一种不明智的行为,不但增加了学习成本,还使得操作更加复杂,所以后来 GCC 又针对不同的语言推出了不同的命令,例如 g++ 命令用来编译 C++,gcj 命令用来编译 Java,gccgo 命令用来编译 Go 语言

总结:当不指定参数的时候,gcc默认c语言源文件的编译指令,对于不同的语言,使用不同的编译指令。
在以后使用 Linux GCC 时,推荐使用 g++ 命令来编译 C++ 程序,这样更加简洁和规范。

3. g++编译过程

经过链接产生可执行文件

g++ test.cpp
./a.out 

以上两行代码其实可以划分为以下几个阶段:

  1. 预处理阶段(生成.i文件):
g++ -E test.cpp  -o test.i

这一步主要做了宏的替换和注释的消除
2.将预处理后的文件转换为汇编语言(生成.s文件)

g++ -S test.i  -o test.s

3.将汇编语言转为目标代码(机器码):

g++ -c test.s  -o test.o

4.链接目标代码,生成可执行程序,这里有两种写法:
动态编译:

g++ test.o  -o test

静态编译:

 g++ test.o -static  -o test 

若执行g++ test.o -o不指定可执行文件名称,则生成a.out
两种编译方式都可生成可执行文件:
前者文件只包含文件名,运行时再链接相关函数,
后者编译时便链接相关函数,前者体积小,运行时没后者快,后者体积大。

相关文章

  • 重新认识C++

    C++ 程序的生命周期 编码、预处理、编译和运行 在编译的过程中,编译器还会根据 C++ 语言规则检查程序的语法、...

  • 如何编译和运行 C++ 程序?

    1. C++程序的后缀 C++ 源文件的后缀则有些混乱,不同的编译器支持不同的后缀,下表是一个简单的汇总: 2. ...

  • 关于如何学习c++语言基本结构?

    首先呢小帅认为,在开始学习c++语言编程之前,应该了解一下c++源程序的基本结构,以及如何书写,编译和运行c++程...

  • 在Linux中如何运行c++文件

    在Linux中如何运行c++文件 首先安装必要的工具和编译器来运行代码。 gcc(GNU编译器套件)简介: GNU...

  • 2-1-2.c++基础

    第一个c++程序 编译 运行 第二个c++程序Human.h Human.cpp main.cpp

  • C语言-如何获取文件的当前信息

    如何获取文件的额的当前信息 备注: 如何判断一段程序是由C编译程序还是由C++编译程序编译的? 1.c++编译时定...

  • CMake搭建项目工程(1)-C/C++编译及CMake那些事

    为了将C/C++代码转换为可以在硬件上运行的程序,需要经过编译和链接。编译是将高级语言所写的源程序翻译成等价的机器...

  • CLion+CMake编写C++程序

    当在mac系统下编写c++程序时候,一般需要使用Xcode。如果不想装Xcode如何编译、运行程序呢? 一种方法是...

  • Scala练习4 文件操作和正则表达式

    提示:如何编译和运行scala程序D:\scalaproject\Test\src>scalac -d outpu...

  • 编译原理

    编译原理 标签(空格分隔): 编译原理 编译和解释 编译 整个程序全部翻译结束之后,程序才能开始运行;编译和运行是...

网友评论

      本文标题:如何编译和运行 C++ 程序?

      本文链接:https://www.haomeiwen.com/subject/ybyxvctx.html