ch00.linux下编译C++文件基本命令

# 预处理
g++ -std=c++11 -E -o problem1.i problem1.cpp
# 编译
g++ -std=c++11 -S -o problem1.s problem1.i
# 汇编
g++ -c problem1.s
# 链接
g++ problem1.o
# 执行
./a.out
----
预处理   .i .ii文件         gcc -E hello.cpp -o hello.i
编译    .s文件             gcc -S hello.cpp -o hello.s
汇编    .o .obj文件       gcc -c hello.cpp -o hello.o
链接    .lib .a文件
---
mangling过程:nm a.out
mangling过程:nm a.out | c++filt -t

  • ESCO

一个C/C++源代码要变成一个可执行文件,需要经过预处理(Pre-processing)-编译(Compiling)-汇编(Assembling)-链接(Link)

  • 基本流程为: test.c[源文件] –预处理–test.i[预处理后代码] –编译– test.s[汇编代码] –汇编– test.o[目标代码文件] –链接– test.exe[可执行文件]
1.预处理

-E 选项使用g++/gcc将源代码预处理后不执行其他动作。 下面的命令将test.cpp预处理,并在标准输出中显示:g++ -E test.cpp 后面加上 -o 选项表示将源代码预处理后输出在指定文件中,比如test.i:g++ -E test.cpp -o test.i

2.编译

-S 选项使用g++/gcc将预处理后的文件编译,翻译成汇编代码。只编译不汇编. 下面的命令将会编译test.i文件,并自动在当前文件夹生成test.s文件:g++ -S test.i 若要指定其他输出名,则需 -o 指定,比如生成名为xxx.s的汇编代码文件:g++ -S test.i -o xxx.s

3.汇编

-c 选项将编译生成的test.s文件生成二进制目标代码. 下面的命令将在当前文件夹自动生成test.o的二进制目标代码文件:g++ -c test.s
如果要指定输出文件名,则需 -o 指定,比如生成xxx.o的二进制目标代码文件:g++ -c test.s -o xxx.o

4.链接

链接阶段是将相关的目标文件链接起来,形成一个整体,生成可执行文件无选项链接;下面的命令会把二进制目标文件test.o所需的相关文件链接成一个整体,并在当前文件夹自动生成一个名为a.out的可执行文件:g++ test.o 如果要执行这个可执行文件,需要输入命令:./a.out 当然也可以指定生成的可执行文件的文件名:g++ test.o -o test.exe

5.单个源文件直接生成可执行文件

当然g++/gcc也可以直接把源代码直接生成可执行文件. 下面的命令将test.cpp直接在当前文件夹生成a.out可执行文件,若要指定文件名,可使用 -o 选项

g++ test.cpp
g++ test.cpp -o test.exe
6.多个源文件直接生成可执行文件

也可以将多个源代码编译链接成一个可执行文件. 下面的命令将test.cpp直接在当前文件夹生成a.out可执行文件,若要指定文件名,可使用 -o 选项

g++ test1.cpp test2.cpp 
g++ test1.cpp test2.cpp -o test.exe
  • 使用C++11标准编译 如果要使用C++11版本特性,则需要使用 -std=c++11 选项
g++ -std=c++11 test.cpp -o test.exe

CPP-Note © 2024 | C++ 学习笔记

This site uses Just the Docs, a documentation theme for Jekyll.