Проблема со ссылкой на <sys / msg.h> с Android.mk - PullRequest
1 голос
/ 28 июля 2011

Я пишу программу на 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)

Я действительно ценю любую помощь.

1 Ответ

3 голосов
/ 17 августа 2011

Заголовки NDK в $ (NDK_ROOT) / platform / android- [X] / usr / include являются единственными заголовками, поддерживаемыми NDK. Если вы используете другие заголовки Android или Linux, ваше приложение может сломаться в будущем.

Почему это? Поскольку большинство приложений для Android работают на виртуальной машине Dalvik и изолированы от системы слоями классов инфраструктуры Java, авторы Android могут позволить себе быть достаточно внимательными к базовой системе Linux. Они могут изменять заголовки и библиотеки так часто, как хотят, если они поддерживают совместимость уровня Java. То же самое относится и к NDK: если они не нарушают очень ограниченный набор заголовков и библиотек, которые предоставляет NDK, они могут изменять все, что хотят изменить, под капотом.

Таким образом, система NDK make не позволяет легко связать что-либо, кроме библиотек NDK. Если бы это облегчало общение со случайными заголовками Linux, это побеждало бы назначение NDK.

...