x86_64 Ubuntu交叉编译zlib for Android arm64/aarch64报错求助
解决x86_64 Ubuntu交叉编译Android arm64 zlib 1.2.13的链接错误
你的问题核心是未正确指定交叉编译工具链,且默认未启用位置无关代码(PIC),导致编译时误用了x86_64系统的链接器,触发重定位错误。-fPIC确实是必要解决方案,但还要配合完整的交叉编译配置。
具体解决步骤:
- 先清理之前的编译残留,避免旧配置干扰:
make clean && rm -f Makefile config.h - 配置时明确指定Android arm64的交叉编译工具链,并强制启用PIC:
参数说明:# 替换为你本地Android NDK的工具链路径/前缀,版本号按需调整 CC=aarch64-linux-android-gcc \ CXX=aarch64-linux-android-g++ \ AR=aarch64-linux-android-ar \ RANLIB=aarch64-linux-android-ranlib \ CFLAGS="-fPIC" \ ./configure --prefix=/your/target/install/path --static --sharedCC/CXX/AR/RANLIB:指定arm64架构的交叉编译工具,若工具未加入系统PATH,需写绝对路径(比如/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android29-gcc)CFLAGS="-fPIC":强制生成位置无关代码,这是Android动态库的硬性要求--prefix:指定编译完成后库的安装目录,方便后续拷贝到App项目中--static --shared:同时生成静态库和动态库,可根据需求只保留其中一个
- 执行编译安装:
make && make install
补充说明:
仅用CHOST=arm64无法让zlib的configure脚本正确识别交叉编译环境,它仍会默认使用x86_64系统的编译工具,导致生成的目标文件架构不匹配,最终触发链接阶段的重定位错误。必须显式指定交叉编译工具链,才能生成符合arm64架构要求的库文件。
内容的提问来源于stack exchange,提问作者Flippy
相关产品推荐
相关产品推荐

