静态链接

静态链接

驱动器驱动程序
大多数编译系统会提供 编译器驱动程序,它代表用户在需要时调用语言预处理器编译器汇编器链接器
main.c:

#include <stdio.h>
int sum(int *a, int n);

int array[2] = {1, 2};

void main() 
{
    int val = sum(array, 2);
   
    printf("%d\n",val);
}

sum.c:

int sum(int *a, int n)
{
    int i, s = 0;
    
    for (i = 0; i < n; i++) { 
        s += a[i];
    }
    return s;
}        

在这里插入图片描述
目标文件:
目标文件有三种形式:

  • 可重定位目标文件(.o):包含二进制代码和数据,其形式可以在编译是与其他可重定位目标文件合并起来,传建一个可执行目标文件。

  • 可执行目标文件(a.out):包含二进制代码和数据,其形式可以被直接复制代内存并执行。

  • 共享目标文件(.so):一种特殊类型的可重定位目标文件,可以在加载或者运行时被动态的加载进内存并链接。
    gcc:
    在这里插入图片描述

链接过程:

  1. 通过在shell中输入下列命令来调用GCC驱动程序:
linux> gcc -Og -o prog main.c sum.c
  1. 驱动程序首先运行C预处理器(cpp),将C的源程序main.c翻译成一个ASCII码的中间文件main.i:
cpp [other arguments] main.c / tmp / main.i
  1. 然后是C编译器(ccl),将main.i翻译成一个ASCII汇编语言文件main.s:
ccl / tem / main.i -Og [other arguments] -o /tmp /main.s
  1. 然后是汇编器(as),将main.s翻译成一个可重定位目标文件main.o:
as [other arguments] -o /tmp /main.o /tmp /main.s
  1. 驱动器经过相同的过程生成sum.o。最后,它运行链接器程序ld,将main.o和sum.o以及一些必要的系统目标文件组合起来,创建一个可执行目标文件prog:
ld -o prog [other arguments] -o /tmp /main.o/tep /sum.o
  1. 运行可执行文件prog,在Linux shell 的命令行上输入:
linux> ./prog

步骤:

  1. .c文件经翻译器变为 .o文件
  2. 创建一个静态库 .a压缩文件
  3. 链接成可执行文件

在这里插入图片描述

运行实例:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值