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

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/TMT123421/article/details/84798154

一、问题描述:

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

展开阅读全文

没有更多推荐了,返回首页