为什么需要交叉编译器?
不同的平台如X86和ARM,一段程序跑起来到最下面会转成汇编,汇编要转成机器码,机器码会由于硬件平台不同而不同。有时候要编程序在ARM上跑,必须针对ARM写程序,但是在ARM上写程序很麻烦(没有很好的开发工具),所以我们就在X86平台上(Windows)上把程序写好,但是编译的时候告诉它我们要运行在ARM上。
静态编译链接库和动态链接库
一、编译静态链接库
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文件拷贝到系统库文件夹下
再运行