为Android编译Socat时运行构建脚本出现NDK相关命令未找到错误
问题原因分析
你使用的Android NDK r23版本已完全移除了旧版工具链生成脚本make-standalone-toolchain.sh,以及该脚本依赖的公共库文件prebuilt-common.sh。你当前用的socat编译脚本是针对r17及更早版本的NDK编写的,调用已废弃的旧工具时自然会出现文件不存在、内置函数找不到的报错。
修复方案
方案1:降级NDK版本(改造成本最低)
直接下载NDK r17c版本,这是最后一个原生支持make-standalone-toolchain.sh的稳定NDK版本。替换你当前的r23版本后,重新修改socat_buildscript_for_android.sh里的NDK路径为r17c的存放路径,重新执行构建脚本即可,无需修改其他逻辑。方案2:适配NDK r23新工具链(无需降级NDK)
直接修改socat_buildscript_for_android.sh的逻辑,适配r23自带的llvm工具链:- 删除脚本中所有调用
make-standalone-toolchain.sh的代码段 - 手动指定编译工具路径,示例配置(以编译64位arm架构为例,32位可替换对应前缀):
export NDK_PATH=你的NDK r23存放路径 export TARGET_HOST=aarch64-linux-android export API_LEVEL=21 export TOOLCHAIN=$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64 export CC=$TOOLCHAIN/bin/$TARGET_HOST$API_LEVEL-clang export CXX=$TOOLCHAIN/bin/$TARGET_HOST$API_LEVEL-clang++ export AR=$TOOLCHAIN/bin/llvm-ar export RANLIB=$TOOLCHAIN/bin/llvm-ranlib export CFLAGS="--sysroot=$TOOLCHAIN/sysroot"- 后续调用socat的configure脚本时添加参数
--host=$TARGET_HOST,再执行make即可完成编译。
- 删除脚本中所有调用
内容的提问来源于stack exchange,提问作者vs123
相关产品推荐
相关产品推荐

