GCC编译器学习

为什么需要交叉编译器?

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

GCC编译器学习_第1张图片

GCC程序编译过程

GCC编译器学习_第2张图片

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

一、编译静态链接库

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

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

举个例子vi count.c 先写一个count函数
GCC编译器学习_第3张图片
gcc -c count.c 生成目标文件 count.o

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

写一个测试程序从库文件中调用count函数
GCC编译器学习_第4张图片
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文件拷贝到系统库文件夹下在这里插入图片描述
再运行
在这里插入图片描述

你可能感兴趣的:(嵌入式)