1. g++安装
在 Linux
或者 UNIX
系统上,可以通过下面命令来查看是否安装了 GCC
。
$ g++ -v
如果已经安装 GNU
编译器,则有以下输出:
wohu@wohu:~/C++$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.10' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10)
wohu@wohu:~/C++$
如果没有安装,在 Ubuntu
系统下使用 apt
命令可以直接安装:
$ sudo apt-get install g++
2. g++使用
2.1 g++ 编译 C++
程序 g++
是将 gcc
默认语言设为 C++
的一个特殊的版本,链接时它自动使用 C++
标准库而不用 C
标准库。
下面是一个保存在文件 main.cpp
中一个简单的 C++
程序的代码:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, world!" << endl;
return 0;
}
最简单的编译方式:
$ g++ main.cpp
由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out
。程序可以这样来运行:
$ ./a.out
Hello, world!
通常我们使用 -o
选项指定可执行程序的文件名,以下实例生成一个 main
的可执行文件:
$ g++ main.cpp -o main
执行 main
应用程序
$ ./main
Hello, world!
2.2 gcc 编译 C++
通过遵循源码的命名规范并指定对应库的名字,用 gcc
来编译链接 C++
程序是可行的,使用下面命令:
$ gcc main.cpp -lstdc++ -o main
3. 生成可执行文件流程
- 使用编辑器编写
C++
代码; - 使用
C++
编译器对代码进行编译,将代码转换为包含在目标文件中的机器语言版本; - 使用链接器链接编译器的输出,生成一个可执行文件(如Windows 中的.exe 文件);
在编译过程中, C++
代码(通常包含在 .cpp
文本文件中)被转换为处理器能够执行的字节码。编译器每次转换一个代码文件,生成一个扩展名为 .o
或 .obj
的目标文件,并忽略这个 cpp
文件可能对其他文件中代码的依赖。
解析这些依存关系的工作由链接程序负责,如果链接成功,则创建一个可执行文件,供程序员执行和分发。整个过程也被称为构建可执行文件。
总结整体过程为: 编写 -> 编译 -> 链接 -> 执行
4. 解释器与编译器区别
- 解释器是一种对代码(或字节码)进行解释并执行相应操作的工具;
- 编译器将代码作为输入,并生成目标文件;
就 C++
而言,编译和链接后,将得到一个可执行文件,处理器可直接执行它,而无需做进一步解释。
编译器将 C++
代码文件作为输入,并生成一个使用机器语言的目标文件。通常,您的代码依赖于库和其他代码文件中的函数。链接器负责建立这些链接,并生成一个可执行文件,它集成了您指定的所有直接或间接依存关系。