gcc和g++的使用

gcc 和g++是GNU 的编译器 1.gcc 和g++编译程序主要分为四个步骤 <1>预处理,生成 .i文件 <2>编译,根据文件名后缀,确定编译方式,(.c,.cpp,.cxx),生成 .s文件 <3>汇编,将.s 文件转换成.o文件(目标文件) <4>链接,对目标文件进行链接 2.gcc 和g++的区别 <1>gcc 主要用于编译c文件,g++主要用于编译c++文件。 <2>gcc 在碰到.c文件时,按照C 文件方式编译,碰到.cpp 时按照C++文件编译,g++在碰到.c 和.cpp文件时都按照C++文件编译。 <3>gcc 也可以编译cpp 文件,但是它无法链接C++的各种库。g++在编译的时候,会调用gcc,也就是说g++的编译汇编工作都是交给gcc 来完成的,链接是由自己完成的。 <4>gcc 不会定义_cplusplus的宏,g++会,所以gcc 编译.c文件时,_cplusplus是没有被定义的。 3.GNU编译器的主要参数 <1>不带任何参数,默认生成.out 文件(可执行文件).     g++ main.cpp  //gcc 无法链接 <2> -c 编译后汇编,或者将.s文件进行汇编,生成目标文件,不进行链接。      gcc -c test.cpp -o test.o      gcc -c test.s -o test.o <3> -S 编译后不进行汇编,生成.s文件      gcc -S test.cpp -o test.s <4> -o 输出文件,输出的可以是可执行文件(可以重命名),.s 文件,.i文件,.o文件 <5> -E 生成预处理文件(.i),只进行预处理。      gcc -E test.cpp -o test.i <6> -shared 编译生成动态链接库     gcc -shared -fPIC test.cpp -o libtest.so     -fPIC,表示生成跟位置无关的代码 <7> -L. 表示需要链接的库就在当前目录 <8> -llibname ,表示要链接的库的名称,libname是库名除去lib前缀以及扩展名后的字符,如libtest.so ,那么就是 -ltest <9> -I(大写的I),添加头文件搜索目录 ,如-I. 当前目录,-I/home/peter/temp <10> -I-,用在-I的后面可以将当前目录从头文件搜索目录中除去 <11> -static 强制链接静态库       gcc test.c -shared -fPIC -o libtest.so -L. -static -ltest2   //智能链接 libtest2.a 4.创建静态库    静态库只是一系列目标文件的集合。    ar cr test.o libtest.a test.o 5.创建动态库    gcc test.c -shared -fPIC -o libtest.so 6.动态库和静态库的区别   <1> 静态库是包含在可执行文件中的,动态库不包含在可执行文件中的,只要当可执行文件运行时,才会的动态加载动态库。
相关文章
相关标签/搜索