当前位置: 首页 > news >正文

给交叉工具链增加libelf.so

一、背景

最近在x86_64环境下使用交叉工具编译链编译arm64程序时,出现报错,缺少elf库,导致编译失败。因此记录下增加libelf.so过程。

CC=aarch64-linux-gnu-gcc make...
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: 找不到 -lelf: 没有那个文件或目录
...

二、源码编译

2.1 系统环境

Ubuntu 22.04.5 LTS

2.2 安装交叉工具链

sudo apt install gcc-aarch64-linux-gnu

2.3 安装依赖libz.so

  • 源码下载
wget https://www.zlib.net/zlib-1.3.1.tar.gz -O zlib-1.3.1.tar.gz
  • 解压
tar xf zlib-1.3.1.tar.gz
  • 编译安装
cd zlib-1.3.1
cmake . -DCMAKE_INSTALL_PREFIX=/usr/aarch64-linux-gnu -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc
make
sudo make install

2.4 安装依赖libzstd.so

  • 源码下载
wget https://github.com/facebook/zstd/archive/refs/tags/v1.5.7.tar.gz -O zstd-1.5.7.tar.gz
  • 解压
tar xf zstd-1.5.7.tar.gz
  • 编译安装
cd zstd-1.5.7
make aarch64build
sudo PREFIX=/usr/aarch64-linux-gnu make install

2.5 安装libelf.so

  • 源码下载
wget https://github.com/arachsys/libelf/archive/refs/tags/v0.193.tar.gz -O libelf-0.193.tar.gz
  • 解压
tar xf libelf-0.193.tar.gz
  • 编译安装
cd libelf-0.193
CC=aarch64-linux-gnu-gcc make
sudo DESTDIR=/usr/aarch64-linux-gnu make install

三、编译过程中的问题

  • elf依赖zstd
aarch64-linux-gnu-gcc -O2 -Wall -DHAVE_CONFIG_H -Iinclude -Isrc -c -o src/elf_compress.o src/elf_compress.c
src/elf_compress.c:44:10: fatal error: zstd.h: 没有那个文件或目录44 | #include <zstd.h>|          ^~~~~~~~
compilation terminated.
make: *** [Makefile:31:src/elf_compress.o] 错误 1
  • elf依赖zlib
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: 找不到 -lz: 没有那个文件或目录
collect2: error: ld returned 1 exit status
make: *** [Makefile:27:libelf.so] 错误 1
http://www.lryc.cn/news/573511.html

相关文章:

  • 操作系统内核态和用户态--2-系统调用是什么?
  • 嵌入式开发之嵌入式系统架构如何搭建?
  • 【软考高级系统架构论文】论面向服务架构设计及其应用
  • modelscope设置默认模型路径
  • python的校园兼职系统
  • Taro 跨端开发:从调试到发布的完整指南
  • 基于正点原子阿波罗F429开发板的LWIP应用(7)——MQTT
  • 华为OD机试-云短信平台优惠活动-完全背包(JAVA 2024E卷)
  • TodoList 案例(Vue3): 使用Composition API
  • 嵌入式开发之嵌入式系统硬件架构设计时,如何选择合适的微处理器/微控制器?
  • 腾讯云IM即时通讯:开启实时通信新时代
  • 一文详解归并分治算法
  • Python:.py文件如何变成双击可执行的windows程序?(版本1)
  • 深入Java面试:从Spring Boot到微服务
  • Django数据库迁移
  • P1220 关路灯
  • Spring Boot + MyBatis + Vue:全栈开发的深度剖析与实践指南
  • IEEE5节点系统潮流仿真模型(simulink+matlab全功能模型)
  • maxcomputer 和 hologres中的EXTERNAL TABLE 和 FOREIGN TABLE
  • Qt/C++应用:防御性编程完全指南
  • C 语言结构体:从基础到内存对齐深度解析
  • 数据结构——函数填空题
  • Rust调用 DeepSeek API
  • Redis 的穿透、雪崩、击穿
  • SuGAR代码精简解读
  • C++ 中 QVector 的判断与操作
  • 探索阿里云容器:解锁云原生应用的无限可能
  • [TPAMI 2022]HGNN: General Hypergraph Neural Networks+
  • Qt + C++ 入门2(界面的知识点)
  • [muduo] ThreadPool | TcpClient | 异步任务 | 通信测试