交叉编译Perl for Android时遇ld.lld找不到库错误求助
解决交叉编译Perl for Android时ld.lld找不到-lpthread/-lcrypt/-lutil的问题
你遇到的问题核心是误用了主机架构的库包,而非Android NDK提供的交叉编译库,以下是具体解决步骤:
先卸载无关的主机库(可选,避免混淆):
sudo apt remove libpthread-stubs0-dev这个包是给x86架构程序用的,和Android交叉编译完全无关。
确保Android NDK路径正确配置:
确认已下载并解压Android NDK(推荐r25及以上版本),将NDK路径加入环境变量:export ANDROID_NDK=/path/to/your/android-ndk-r25c替换成你实际的NDK解压路径。
修正测试程序的编译命令:
Android的libpthread、libcrypt功能已整合到libc中,无单独动态库;libutil是Linux主机特有的库,Android系统不存在。编译时直接去掉这些链接参数,并指定NDK的sysroot:aarch64-linux-android23-clang --sysroot=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot test.c -o test调整Perl Configure脚本的参数:
运行Configure时明确指定交叉编译环境,同时禁用Android不存在的库依赖:./Configure -des \ -Dcc=aarch64-linux-android23-clang \ -Dld=aarch64-linux-android23-clang \ -Dsysroot=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot \ -Dprefix=/data/local/perl \ -Dlibpthread=none \ -Dlibcrypt=none \ -Dlibutil=none参数说明:
-des:采用默认配置,跳过交互式提问-Dprefix:指定Perl在Android设备上的安装路径-Dlibxxx=none:告知Configure无需链接这些不存在的库
如果Configure仍报错,可检查生成的config.sh文件,手动删除包含-lpthread、-lcrypt、-lutil的行后,重新运行make。
内容的提问来源于stack exchange,提问作者JayTee
相关产品推荐
相关产品推荐

