对现有方法的未定义引用

时间:2013-11-17 20:59:38

标签: android c++ c cyanogenmod

我正在尝试为我的设备编译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);

一切似乎都好。什么可能导致这样的错误?

2 个答案:

答案 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选项,看看错误是否消失。