g++编译过程
分布编译
- 预处理:-E // .i文件
-E 选项指示编译器仅对输入文件进行预处理
g++ -E test.cpp -o test.i //.i文件
- 编译:将预处理的.i文件编译成.s文件 // .s文件
-S 编译选项告诉 g++ 在为 C++ 代码产生了汇编语言文件后停止编译
g++ -S test.i -o test.s
- 汇编:-c 把源代码编译为机器语言的目标代码
g++ -c test.s -o test.o
- 链接:-o 生成可执行文件
g++ test.o -o test
g++ test.cpp -o test
优化代码
- 在编译时,可直接加入参数可对代码进行优化,优化后可是代码的执行时间缩短、效率提高。
优化参数共有四个:
-O 同时减小代码的长度和执行时间,其效果等价于-O1
-O0 表示不做优化
-O1 为默认优化
-O2 除了完成-O1的优化之外,还进行一些额外的调整工作,如指令调整等。
-O3 则包括循环展开和其他一些与处理特性相关的优化工作。
选项将使编译的速度比使用 -O 时慢, 但通常产生的代码执行速度会更快。
一般选择-O2就够了。
该参数O为(大写)的O,并写在小写-o前面
// 不做优化的编译:
g++ test.cpp -o test
// 使用-O2的的优化编译
g++ test.cpp -O2 -o test
指定头文件所在目录
- 参数-I:(大写的i),后面直接加路径,不需要空格
├── include
│ └── Swap.h
├── main.cpp
└── src
└── Swap.cpp
g++ main.cpp src/Swap.cpp -Iinclude -o out
链接库文件
-l
:连接在/lib、 /usr 、/usr/local/lib目录下的库文件- -l后面直接加库名,不需要空格
-L
: 连接不在以上三个目录下的库文件需要使用-L来指定库文件路径,然后使用-l来链接指定库文件
// 链接ffmpeg库
g++ test.cpp -o test -lffmpeg
g++ test.cpp -o test -L/home/bing/mytestlibfolder -lffmpeg