2013-11-17 9 views
0

Я пытаюсь скомпилировать 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); 

Все вроде нормально. Что может вызвать такие ошибки?

ответ

1

Функция signiture относится к

const char * 

В то время как файл с ++ ищет функцию с

char const* 

Это не то же самое. Один из них является постоянным указателем на непостоянный символ, тогда как другой является непостоянным указателем на постоянный символ. Google const char * vs char const * для получения дополнительной информации.

0

Эта проблема не вызвана const char* и char const *, потому что они все одинаковы. const char * и char * const - это разные вещи. Более того, если сигнатура неверна, компилятор вместо компоновщика будет жаловаться.

Предлагаю вам проверить LD_LIBRARY_PATH и параметр -l на вашем Android.mk, чтобы узнать, исчезла ли ошибка.

Смежные вопросы