Android平台编译VINS应用时libgomp库链接失败求助
解决Android VINS应用链接libgomp失败的思路
核心原因
你添加的第三方libceres.a大概率是基于GCC编译的,依赖GCC的OpenMP实现库libgomp,但当前使用的NDK 18版本中,默认LLVM Clang工具链使用的是libomp而非libgomp,导致链接器找不到指定库。
具体解决步骤
替换链接库为libomp
修改CMakeLists.txt中target_link_libraries里的-lgomp为-lomp,NDK从r11版本开始支持LLVM的OpenMP库,clang会自动匹配对应的libomp。指定gomp库路径(需保留gomp时)
先检查NDK的GCC工具链目录下是否存在libgomp:
进入路径/Users/sue/Library/Android/sdk/ndk/18.1.5063045/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/lib/gcc/aarch64-linux-android/4.9.x/,查看是否有libgomp.a或libgomp.so。如果存在,在CMakeLists中添加该路径到链接搜索路径:link_directories(/Users/sue/Library/Android/sdk/ndk/18.1.5063045/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/lib/gcc/aarch64-linux-android/4.9.x/)重新编译适配Android的libceres.a
第三方预编译库常存在编译环境不匹配问题,建议用当前NDK 18工具链重新编译Ceres库:- 配置Ceres的CMake编译环境,指定Android交叉编译工具链
- 若不需要OpenMP支持,添加编译选项
-DCERES_USE_OPENMP=OFF - 编译出适配arm64-v8a等架构的静态库,替换现有
libceres.a
调整NDK版本
若上述方法无效,可尝试降级NDK到r17及以下版本(这类版本GCC工具链的libgomp支持更完善),或升级到r21+版本(对OpenMP的支持更统一)。
内容的提问来源于stack exchange,提问作者sm00
相关产品推荐
相关产品推荐

