标签:blog http os io 文件 ar 代码 html
参考:gcc参数详解
gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步
1.预处理,生成.i的文件[预处理器cpp]。 对应的参数是 -E
2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]。对应的参数是 -S
3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]。对应的参数是 -c
4.连接目标代码,生成可执行程序[链接器ld]。无参数。
有三个文件f1.h、f1.cc、test.cc
内容分别为:
f1.h
void f1();
f1.cc
#include <iostream> #include "f1.h" using namespace std; void f1() { cout << "f1()" << endl; }
test.cc
#include <iostream> #include "f1.h" using namespace std; int main() { f1(); cout << "hello" << endl; }
编译链接过程如下:
[root@VM-127-178 gcc_test]# ls f1.cc f1.h test.cc [root@VM-127-178 gcc_test]# g++ -S f1.cc [root@VM-127-178 gcc_test]# g++ -S test.cc [root@VM-127-178 gcc_test]# ls f1.cc f1.h f1.s test.cc test.s [root@VM-127-178 gcc_test]# g++ -c f1.s [root@VM-127-178 gcc_test]# g++ -c test.s [root@VM-127-178 gcc_test]# ls f1.cc f1.h f1.o f1.s test.cc test.o test.s [root@VM-127-178 gcc_test]# g++ f1.o test.o [root@VM-127-178 gcc_test]# ls a.out f1.cc f1.h f1.o f1.s test.cc test.o test.s [root@VM-127-178 gcc_test]# ./a.out f1() hello [root@VM-127-178 gcc_test]#
-o:生成的目标文件名称。如果没有-o则默认生成a.out。
-l :需要链接的库名称。即链接库文件去掉lib前缀和.so后的部分。如libev.so就是 -lev;libace.so就是 -lace。
-L :链接库文件的搜索路径。默认链接库的搜索路径为/usr/lib、/usr/lib64
-I :include头文件的搜索路径。默认头文件的路径为/usr/include
-g :增加调试信息。
标签:blog http os io 文件 ar 代码 html
原文地址:http://my.oschina.net/u/1864567/blog/304351