一、编译静态库
(1)所用例子:
四个程序文件:main.c、function.h、greeting.c name.c
main.c
#include <iostream>
#include "function.h"
using namespace std;
int main()
{
cout<<"main mian"<<endl;
sayGreetings();
sayName();
return 0;
}
function.h
void sayGreetings();
void sayName();
greeting.c
#include <iostream>
using namespace std;
#include "function.h"
void sayGreetings()
{
std::cout << "hello,world" << std::endl;
}
name.c
#include <iostream>
#include "function.h"
using namespace std;
void sayName(){
cout<<"my name is aha!"<<endl;
}
(2) 编译过程
编译过程如下图,g++开头的是使用本地gcc编译,aarch64-linux-gnu-g++开头的是交叉编译成arm版本,它们俩步骤其实是一样的,只是用的编译器不一样罢了。
二、编译动态库
用例程序文件跟静态库一样,命令如下
最后提示“可执行文件格式错误”,就是因为它交叉编译生成的arm架构,在x86上自然不能执行,我们也可以通过命令来查看动态库或者可执行程序的架构信息:file liba.so 或 readelf -h liba.so