为Android编译valgrind报错“ld: error: unable to find library -lgcc”
问题原因
NDK r23及以上版本移除了传统位于toolchains/arm-linux-androideabi-4.9/prebuilt/路径下的libgcc库,默认切换到LLVM的libunwind作为底层运行时,而valgrind官方构建脚本默认写死了链接时依赖-lgcc参数,因此触发找不到库的错误。
解决步骤
- 第一步:在构建脚本的变量定义块新增LDFLAGS变量,添加libgcc的实际搜索路径,补充运行时依赖:
# 新增到原有变量定义区域 # 可先到${TOOLCHAIN}/lib/clang/路径下确认实际的clang版本号,替换下方的12.0.8 export CLANG_VER="12.0.8" export LDFLAGS="-L${TOOLCHAIN}/lib/clang/${CLANG_VER}/lib/linux/arm -lgcc -lunwind"
- 第二步:修改configure命令,传入新增的LDFLAGS参数,同时补充Android平台适配的配置项:
${SRC_DIR}/configure \ --host=${TARGET} \ --target=${TARGET} \ --prefix="${BUILD_DIR}/../install_ndk" \ --with-android-sdk=${API} \ LDFLAGS="${LDFLAGS}" || exit 1
- 第三步:如果依然报相同错误,直接修改configure生成的所有Makefile文件,把所有出现
-lgcc的位置,替换为-L${TOOLCHAIN}/lib/clang/${CLANG_VER}/lib/linux/arm -lgcc -lunwind即可。 - 额外注意:valgrind官方对Android平台的支持最高验证到Android 9(API 28),你当前的目标API刚好匹配,无需额外打版本适配补丁。
内容的提问来源于stack exchange,提问作者Jiang
相关产品推荐
相关产品推荐

