Android ndk 链接到<;系统/消息h>;使用Android.mk

Android ndk 链接到<;系统/消息h>;使用Android.mk,android-ndk,message-queue,Android Ndk,Message Queue,我正在编写一个C程序,用于android命令行。在开始使用消息队列并包括linux/msg.h(或sys/msg.h)之前,我在编译时没有遇到任何问题。我不知道应该链接到哪个库,甚至不知道如何使用Android.mk链接。我已经回答了尽可能多的问题,但似乎没有任何答案 我得到的确切错误是: sys/msg.h:没有这样的文件或目录 函数“msgget”的隐式声明 函数“msgsnd”的隐式声明 函数“msgrcv”的隐式声明 函数“msgctl”的隐式声明 这是我的Android.mk文件:

我正在编写一个C程序,用于android命令行。在开始使用消息队列并包括linux/msg.h(或sys/msg.h)之前,我在编译时没有遇到任何问题。我不知道应该链接到哪个库,甚至不知道如何使用Android.mk链接。我已经回答了尽可能多的问题,但似乎没有任何答案

我得到的确切错误是:

  • sys/msg.h:没有这样的文件或目录
  • 函数“msgget”的隐式声明
  • 函数“msgsnd”的隐式声明
  • 函数“msgrcv”的隐式声明
  • 函数“msgctl”的隐式声明
这是我的Android.mk文件:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_SRC_FILES := appX.c 
LOCAL_MODULE := appX
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_LIBRARIES := libc
LOCAL_C_INCLUDES := $(LOCAL_PATH)
include $(BUILD_EXECUTABLE)
我真的很感谢你的帮助

NDK只支持$(NDK_ROOT)/platforms/android-[X]/usr/include中的NDK头。如果您使用其他Android或Linux头文件,您的应用程序将来可能会崩溃

为什么会这样?由于大多数Android应用程序都运行在Dalvik虚拟机中,并且通过Java框架类的分层与系统隔离,所以Android作者可以对底层Linux系统相当傲慢。只要保持Java层的兼容性,他们就可以自由地随时更改头和库。NDK也是如此:只要它们不破坏NDK提供的非常有限的头文件集和库,它们就可以在后台更改任何想要更改的内容


因此,通过设计,NDK make系统不容易链接到NDK库之外的任何东西。如果它使与随机Linux头的对话变得容易,那么NDK的用途就不复存在。

您还没有提到为什么要使用Linux消息队列。无论你想做什么,都可能有一种更为Android-y的方式。你能提供更多关于你的申请的细节吗?我真的需要IPC。然而,我意识到我可以摆脱多线程而不是多处理。没有办法添加这些头?