GCC编译器学习

为什么需要交叉编译器?

不同的平台如X86和ARM,一段程序跑起来到最下面会转成汇编,汇编要转成机器码,机器码会由于硬件平台不同而不同。有时候要编程序在ARM上跑,必须针对ARM写程序,但是在ARM上写程序很麻烦(没有很好的开发工具),所以我们就在X86平台上(Windows)上把程序写好,但是编译的时候告诉它我们要运行在ARM上。

在这里插入图片描述

GCC程序编译过程

在这里插入图片描述

静态编译链接库和动态链接库

一、编译静态链接库

1.先生成目标文件 .o
2.将目标文件打包 ar crv[ *.a ] [ *.o ]

调用静态链接库
gcc -o [file][file.c] -L. [file.a]

举个例子vi count.c 先写一个count函数
在这里插入图片描述
gcc -c count.c 生成目标文件 count.o

ar crv count.a count.o 将目标文件打包

写一个测试程序从库文件中调用count函数
在这里插入图片描述
gcc -o test test.c -L./ count.a 调用静态链接库生成可执行文件(-L搜索库的目录)

运行程序.
在这里插入图片描述

二、编译动态链接库

1.生成位置无关的目标代码 gcc -fPIC -c [*.c]

2.gcc -shared -o [ * .so ] [ * .o ]

有两种调用方法:一种是显式的(在代码中添加),一种是隐式的

隐式调用动态链接库:(与静态链接库类似)

gcc -o [file] [file.c] -L. [file.so]

关于动态链接库的系统路径PATH
①考虑将库放到系统文件夹下
②配置系统路径

举例
1.生成位置无关的目标代码 在这里插入图片描述
2.生成.so文件
在这里插入图片描述
3.生成可执行文件
在这里插入图片描述
4.运行可执行文件
在这里插入图片描述
发现没有库文件
需要将count.so文件拷贝到系统库文件夹下在这里插入图片描述
再运行
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值