对现有方法的未定义引用

Undefined reference to existing method

本文关键字:未定义 引用 有方法      更新时间:2023-10-16

我正试图为我的设备编译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*)'

该方法在/device/my/device/packages/LibPlayer/amavutils/include 中包含的ammodule.h中声明

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);

一切似乎都很好。是什么原因导致了这样的错误?

函数签名指

const char *

而c++文件正在寻找一个具有的函数

char const*

这不是一回事。一个是指向非常量字符的常量指针,而另一个则是指向常量字符的非常量指针。Google const char*vs char const*获取更多信息。

此问题不是由const char*char const *引起的,因为它们都是相同的。CCD_ 8和CCD_。此外,如果签名不匹配,编译器而不是链接器会抱怨。

我建议您检查Android.mk中的LD_LIBRARY_PATH和-l选项,看看错误是否消失。