一、问题描述:
NDK版本:ndk16b;
使用 NDK 编译工具编译程序的时候,有时会出现了如下问题:
root@XXX_Device:/data/test # ./build.sh [你的源文件路径:行号]: error: undefined reference to 'stderr' collect2: error: ld returned 1 exit status root@XXX_Device:/data/test #
真是摸不着头脑,明明在 android 4.3 中可以用的呀!
二、问题分析:
代码中使用了大量的标准IO设备:stderr 等,这些在NDK15以后,这些都不被支持了(官方说明文档),代码本身没问题,只是编译器链接时找不到对应的静态库定义了;
三、解决方法:
在编译选项中添加语句
-D__ANDROID_API__=[你的android API版本号]
即可;比如我用android系统为android 5.1.1 对应 API = 22,编译选项中应该添加:
-D__ANDROID_API__=22
四、android系统版本 和 API 对应表
adb shell 获取 android 系统版本:
getprop ro.build.version.release
adb shell 获取 android 系统 API 版本:
getprop ro.build.version.sdk>
API Level | Android版本 |
---|---|
28 | 9 |
27 | 8.1 |
26 | 8.0 |
25 | 7.1.1 |
24 | 7.0 |
23 | 6.0 |
22 | 5.1.1 |
21 | 5.0.1 |
20 | 4.4w.2 |
19 | 4.4.2 |
18 | 4.3.1 |
17 | 4.2.2 |
16 | 4.1.2 |
15 | 4.0.3 |
14 | 4.0 |
10 | 2.3 |
8 | 2.2 |
—— 2018-12-04 ——