1-6 linux下编译过程

  1. 预处理:(1)将宏定义展开;(2)将头文件插入;(3)处理条件预编译指令;(4)删除注释;(5)添加行号;(6)保留#pragma 编译器指令;
  2. 编译:(1)词法分析(2)语法分析(3)语义分析(4)源代码优化
  3. 汇编:转换为汇编语言
  4. 链接:未解决符号重定位
    1. 静态链接:编译时完成;需要的函数被复制到相关位置;利用ar cr libxxx.a  xx.o命令生成;
    2. 动态链接:程序运行时重定位;g++ -fPIC(位置无关) -shared libXXX.so  XXX.o命令生成;
    3. 静态链接执行速度快,但是动态链接占用内存少,更有利于共享内存;
    4. 程序升级问题:静态链接改动就得重新编译,动态链接接口不变就不需要改动;

猜你喜欢

转载自blog.csdn.net/csdnxxm/article/details/105418248
1-6