两个常见的 NDK 编译问题
阅读本文大概需要 0.66 分钟。
种一棵树最好的时间是 10 年前,其次是现在。
1. 常见问题一
error: undefined reference to
'omp_set_num_threads'
error: undefined reference to
'omp_get_num_threads'
error: undefined reference to
'GOMP_parallel'
问题原因:未引入 OpenMP
OpenMP(Open Multi-Processing)是由 OpenMP Architecture Review Board 提出的,并已被广泛接受的,用于共享内存并行系统多线程程序设计的一套指导性注释。OpenMP 支持的编程语言包括C语言、C++ 等。OpenMP 提供了对并行算法的高层的抽象描述,程序员通过在源代码中加入专用的 pragma 标签来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。
解决办法是,在 local_ldlibs 标签添加支持 OpenMP
LOCAL_LDLIBS := -fopenmp
2. 常见问题二
error: undefined reference to
'std::ios_base::Init::Init()'
error: undefined reference to
'std::ios_base::Init::~Init()'
error: undefined reference to
'std::__throw_length_error(char const*)'
原因:未提供支持 GNU STL(Standard Template Library)
Android NDK 默认支持的是最小系统 C++ 运行时库(libstdc++)
Android NDK 支持的各种运行时库如下:
详细见:
https://developer.android.com/ndk/guides/
cpp-support?hl=zh-cn
解决办法:
在 Android.mk 文件中设置
GNU_STL_PATH:=
$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/
$(NDK_TOOLCHAIN_VERSION)/libs/$(TARGET_ARCH_ABI)
GNU_STL_LIB_NAME:=
gnustl_static
LOCAL_LDLIBS :=
-L$(GNU_STL_PATH)
-l$(GNU_STL_LIB_NAME)
在 Application.mk 文件中设置
APP_STL := gnustl_static
-- END --
迷茫的时候,选择最难走的那条路
Copyright © 2018 AndroidGeeks
本文由“135编辑器”提供技术支持
▼
AndroidGeeks