【错误笔记】NDK编译时出现undefined reference to 'stderr' 问题

文章目录

  • 一、问题描述:
  • 二、问题分析:
  • 三、解决方法:
  • 四、android系统版本 和 API 对应表

一、问题描述:

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 ——

你可能感兴趣的:(●,【,问题集,】)