查看原文
其他

两个常见的 NDK 编译问题

字节流动 字节流动 2022-09-15



阅读本文大概需要 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



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存