gcc编译与交叉编译(x86 to arm) (二)编译静态库和动态库

一、编译静态库

(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

在这里插入图片描述

三、参考

cmake交叉编译教程

猜你喜欢

转载自blog.csdn.net/qq_41104439/article/details/130724494
今日推荐