Я пытаюсь скомпилировать CyanogenMod 10.2 для своего устройства, но при компиляции фреймворков /av получаю ошибку компиляции:
target SharedLib: libmediaplayerservice (/home/vektor/CM102/out/target/product/s7300b /obj/SHARED_LIBRARIES/libmediaplayerservice_intermediates/LINKED/libmediaplayerservice.so)
frameworks/av/media/libmediaplayerservice/AmlogicPlayer.cpp:891: error: undefined reference to 'ammodule_match_check(char const*, char const*)'
Этот метод объявлен в ammodule.h
содержащемся в /device/my/device/packages/LibPlayer/amavutils/include
И в AmlogicPlayer.cpp
он включал:
#include "ammodule.h"
В Android.mk
файл кажется включенным:
AMPLAYER_APK_DIR=$(TOP)/device/my/device/packages/LibPlayer/
LOCAL_C_INCLUDES +=\
$(AMPLAYER_APK_DIR)/amavutils/include
Это подпись от ammodule.h
int ammodule_match_check(const char *allmodstr,const char *modname);
Все выглядит нормально. Что может вызвать такие ошибки?
Функция signiture относится к
const char *
В то время как файл c++ ищет функцию с
char const*
Это не одно и то же. Один из них является постоянным указателем на непостоянный символ, тогда как другой является непостоянным указателем на постоянный символ. Google const char * vs char const * для получения дополнительной информации.
Эта проблема не вызвана const char*
и char const *
потому что они все одинаковы. const char *
и char * const
- это разные вещи. Более того, если сигнатура неверна, компилятор вместо компоновщика будет жаловаться.
Я предлагаю вам проверить LD_LIBRARY_PATH и -l на вашем Android.mk, чтобы узнать, исчезла ли ошибка.