【问题标题】:Problem linking to <sys/msg.h> with Android.mk使用 Android.mk 链接到 <sys/msg.h> 时出现问题
【发布时间】:2011-07-27 22:47:12
【问题描述】:

我正在编写一个用于 android 命令行的 C 程序。在我开始使用消息队列并包括 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)

我非常感谢任何帮助。

【问题讨论】:

  • 您还没有提到为什么要使用 Linux 消息队列。可能有一种更适合 Android 的方式来处理您想做的任何事情。您能否提供有关您的应用程序的更多详细信息?
  • 我真的只需要 IPC。然而,我意识到我可以摆脱多线程而不是多处理。

标签: android-ndk message-queue


【解决方案1】:

$(NDK_ROOT)/platforms/android-[X]/usr/include 中的 NDK 标头是 NDK 唯一支持的标头。如果您使用其他 Android 或 Linux 标头,您的应用将来很可能会崩溃。

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

因此,根据设计,NDK 制作系统无法轻松链接到 NDK 库以外的任何内容。如果它可以很容易地与随机 Linux 标头对话,那么它将破坏 NDK 的目的。

【讨论】:

  • 没有办法添加这些标题吗?
猜你喜欢
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 2017-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多