【发布时间】:2015-07-17 05:04:40
【问题描述】:
我稍微修改了一下,并认为这是一个有趣的项目,可以增强 Android 源中特定服务(即 Wifi、Location 和 Power 服务)提供的功能。
如果本机代码完全独立,我可以毫无问题地编译本机代码。但是,一旦我尝试包含不是传统 linux 或 libc 头文件的头文件,我就会在编译时遇到与定位这些文件相关的问题。
例如,Android 中的原生 wifi 实现可以在源代码树中的 hardware/libhardware_legacy/wifi/wifi.c 找到。当然,这个来源可能还包括标题和导致进一步定位问题的东西。
同样,一些原生电源函数位于hardware/libhardware_legacy/power/power.c。
在使用 NDK 时链接这些本机实现的标准是什么?我的第二个想法是可能在编译时定义动态链接到加载的 wifi/location/power-related *.so,但我以前没有这样做过,我不确定该怎么做;不过,如果我能弄清楚哪个共享对象实现了这个本机代码,这可能是一个选择。
【问题讨论】:
-
问:您指的是内核模块的源代码,还是用户空间代码。您可以使用 NDK 调用后者,但通常不能调用前者。查看here了解更多详情。
-
@paulsm4,有没有简单的方法可以判断?我想这些实现驻留在 kernel-space 中,因为用户显然不希望使用诸如位置服务之类的东西。在这种情况下,我应该考虑构建一个内核模块包装器或类似的东西。如果您无法链接到 kernel-space 代码,如何使用 NDK 构建内核模块?
标签: android android-ndk native dynamic-linking