【问题标题】:Android NDK doesn't support header files?Android NDK 不支持头文件?
【发布时间】:2013-02-09 05:58:15
【问题描述】:

此页面有为 Android 编译 iwlist 和其他命令的说明: https://code.google.com/p/haggle/wiki/WirelessTools

不幸的是,我遇到了与该页面上的评论者相同类型的错误:

Android NDK: WARNING: Unsupported source file extensions in /home/simon/Android-SDK/wireless_tools.29/Android.mk for module iwlist Android NDK: iwlib.h

当我从 Android.mk 的 LOCAL_SRC_FILES 中删除 iwlib.h 时,它没有显示该警告,但仍然失败并出现相同的错误:

./iwlist.c:633:7: error: 'IW_EV_LCP_PK2_LEN' undeclared (first use in this function)

这是未声明的,因为它位于它所警告的 iwlib.h 文件中。

那么为什么 Android NDK 不能识别头 .h 文件呢?

【问题讨论】:

    标签: android c android-ndk


    【解决方案1】:

    为了构建库,您解压缩了 gz 文件,然后运行 ​​make,不是吗?或者你只是重命名wireless.22.h?无论如何,在你运行ndk-build 之前,你的包目录中有一个wireless.h 文件。将以下两行添加到该文件的末尾:

    #undef IW_EV_LCP_PK_LEN
    #undef IW_EV_POINT_PK_LEN
    

    并从 Android.mk 的 LOCAL_SRC_FILES 中删除 iwlib.h。 @Gabe 是对的,头文件不应该单独编译。在 iwlist.c 你会发现第 14 行:

    #include "iwlib.h"
    

    【讨论】:

    • 我重命名了 wireless.22.h,我不知道为什么他们有这么多版本的 wireless#.h。为什么需要 make,我认为链接页面上的命令就足够了?
    • 不,make 不是必需的...我只是问您如何生成 ./wireless.h 文件 - 一种可能的方法是运行 @987654328 @,但重命名也可以。 (其实这两种方法都不好,因为你必须找到与你的 Android 目标匹配的 wireless.h 版本,但这是一个单独的问题)
    • 太棒了,谢谢!首先,你是怎么做到的?取消定义这两个变量......编译器可以看到它们吗?另外,您对找到正确版本的 wireless.h 有什么建议吗?
    • Alex,我按照您的指示编译文件,将它们移到我的设备上,但它们不起作用 - iwconfig 和 iwlist 的输出都是 unicode 乱码。你在android上成功编译和运行iwlist了吗?你能分享一下二进制文件吗?
    • 不,我从未尝试在 Android 上运行它;我相信除非你授予它 SU 权限,否则它是没用的。
    【解决方案2】:

    您通常不会编译头文件。您将它们包含在您编译的 .c 或 .cpp 文件中。但是您不会将它们作为源文件传递给编译器。

    【讨论】:

    • 好的,如何包含带有编译所需的重要常量的标头?
    猜你喜欢
    • 2013-10-19
    • 2011-06-03
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 2011-04-26
    相关资源
    最近更新 更多