g++编译命令

一、编译过程

1、预处理

     1) 展开所有的以#开始的预编译指令,过滤注释,加入行号,引入头文件,生成*.i文件

     2) g++ -E hello.cpp -o hello.i

2、编译

     1) 进行词法分析、语法分析、语义分析、优化后产生相应的汇编文件*.s

     2) g++ -S hello.i -o hello.s

3、汇编

      将编译文件*.s通过AS汇编成目标文件*.o

4、链接

     1)把一些指令对其它符号地址的引用加以修正,包括地址和空间分配、符号决议、重定位等过程,将目标文件和库一起链接形成最终可执行文件.

 

二、常用编译方法

1、静态库编译与使用方法:

     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

 

2、动态链接库编译与使用方法:

     1) 将cpp生成.o文件

         g++ -fPIC -o A.o -c A.cpp

         g++ -fPIC -o B.o -c B.cpp

     2) 由*.o文件创建动态库

         g++ -shared -o libXXX.so A.o B.o

     3) 一句话搞定

         g++ -fPIC -shared -o libXXX.so A.cpp B.cpp

 

3、编译参数说明

     1) -fPIC 编译为独立位置的代码,必须添加,否则无法实现代码段共享;

     2) -Lpath 表示在path目录搜索库文件,-L.表示当前目录;

     3) -Ipath 表示在path目录搜索头文件;

     4) -ltest  表示要链接的库名,表示依赖libtest.so

 

4、动态库和静态库重名时,优先链接动态库

 

5、gcc与g++的区别:

      1) 都可以用于编译.c或.cpp文件;

      2) gcc将.c文件当成C程序,g++将.c文件当成C++程序;

      3) g++的语法检测更严格一些;

      4) 对于cpp文件,gcc与g++在编译阶段是等价的,g++会调用gcc;

      5) 链接由g++完成,由两种方式:g++ 或 gcc -lstdc++

 

6、extern “C”表示以C的命名方式来为symbol命名,否则gcc/g++都以C++方式命名

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值