我正在尝试为我的设备编译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);
一切似乎都好。什么可能导致这样的错误?
答案 0 :(得分:1)
功能签名是指
const char *
而c ++文件正在寻找带
的函数char const*
这些不是一回事。一个是指向非常量char的常量指针,而另一个是指向常量char的非常量指针。 Google const char * vs char const *获取更多信息。
答案 1 :(得分:0)
此问题不是由const char*
和char const *
引起的,因为它们都是相同的。 const char *
和char * const
是不同的事情。此外,如果签名不匹配,编译器而不是链接器会抱怨。
我建议您检查Android.mk中的LD_LIBRARY_PATH和-l选项,看看错误是否消失。