linux下 cmake 交叉编译 生成ARM平台动态库方法测试软件libprotobuf.so

1 篇文章 0 订阅

1、问题介绍

camke进行编译时候会根据当前平台来进行编译,编译出当前系统支持的格式就比如一般Linux不配置的情况下

编译出的文件格式为x86

linux下使用file filename 可以查看文件的属性,如果我们需要使用嵌入式支持的库那必须是ARM的,如果不是就会报如下错误

../libs//libprotobuf.so: file not recognized: File format not recognized

意思是库格式无法识别,进去查看格式发现可能为x86,平台不一样必然会导致文件无法识别而正确的应该是ARM xxx

libprotobuf.so.17.0.0: ELF 64-bit LSB  shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=2986149ead5e8455e5721cad1039b9080cb4e854, stripped

此时我们需要进行源码交叉编译生成ARM平台可以正确运行的库。

2、解决办法

这里我就拿libprotobuf这个库举例,首先我们应该下载安装cmake跨平台编译器

这个自己去下载就好了,然后我们说说后面的具体实现

libprotobuf网上有源码自己可以下载,下载下来后进行加压可以看到protobuf-3.6.1

编译的正常步骤是

cd cmake

mkdir build && cd build

cmake ../cmake  

make -j2

按照这步骤编译出来的肯定不适合ARM,因为你是linux下编译的适合linux使用,这时候你需要设置自己平台和编译器,一般可能会借助一个文件去生成,命名为toolchain.cmake

关于toolchain.cmake可以阅读这一篇博客cmake交叉编译配置文件 - XXX.toolchain.cmake - 流水灯 - 博客园

添加方式也很简单指定好路径就可以

cmake -DCMAKE_TOOLCHAIN_FILE=/home/huzheng/work/t7_v1.2/buildroot-201611/target/user_rootfs_misc/rpts/zlib-1.2.11/toolchain.cmake ..

整个执行路径可以用一个脚本去实现,如cmake.mk,直接运行这个脚本进行编译

    mkdir build && cd build


    cmake -DCMAKE_TOOLCHAIN_FILE=/home/huzheng/work/t7_v1.2/buildroot-201611/target/user_rootfs_misc/rpts/zlib-1.2.11/toolchain.cmake ..


    make && sudo  make install && /


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值