给交叉工具链增加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