(1) 都可以用于编译.c或.cpp文件;
(2) gcc将.c文件当成C程序,g++将.c文件当成C++程序;
(3) g++的语法检测更严格一些;
(4) 对于cpp文件,gcc与g++在编译阶段是等价的,g++会调用gcc;
(5) 链接由g++完成,由两种方式:g++ 或 gcc -lstdc++
展开所有的以#开始的预编译指令,过滤注释,加入行号,引入头文件,生成*.i文件
g++ -E hello.cpp -o hello.i
进行词法分析、语法分析、语义分析、优化后产生相应的汇编文件*.s
g++ -S hello.i -o hello.s
将编译文件*.s通过AS汇编成目标文件*.o
把一些指令对其它符号地址的引用加以修正,包括地址和空间分配、符号决议、重定位等过程,将目标文件和库一起链接形成最终可执行文件.
1) 将相关*.cpp生成*.o文件
g++ -C *.cpp
2) 由*.o文件创建静态库*.a文件
ar cr libXXX.a A.o B.o C.o
3) 显示静态库中的目标文件
ar tv libXXX.a
4) 使用静态库文件
g++ -o targetName *.cpp -L. -lXXX.a
g++ -fPIC -o A.o -c A.cpp
g++ -fPIC -o B.o -c B.cpp
g++ -shared -o libXXX.so A.o B.o
g++ -fPIC -shared -o libXXX.so A.cpp B.cpp
(1) -fPIC 编译为独立位置的代码,必须添加,否则无法实现代码段共享;
(2) -Lpath 表示在path目录搜索库文件,-L.表示当前目录;
(3) -Ipath 表示在path目录搜索头文件;
(4) -ltest 表示要链接的库名,表示依赖libtest.so
原文:https://www.cnblogs.com/coderbase/p/11371797.html