【发布时间】:2013-02-26 15:10:06
【问题描述】:
在使用 ndk-build 在 android 中编译我的 JNI 源时,我无法解决问题。导致错误的类如下:
class MxDataSource : public MediaSource
{
public:
MxdataSource();
virtual status_t start(MetaData *params);
virtual status_t stop();
virtual sp<MetaData> getFormat();
virtual status_t read(MediaBuffer **buffer, const MediaSource::ReadOption *options));
virtual ~MxDataSource();
void LinkMxData(MxData* data);
void DelinkMxData();
};
这里,所有的虚方法都是在MediaSource 类中定义的。现在,当我编译它时,出现以下错误:
MxDataSource.cpp(.data.rel.ro+0x8):error: undefined reference to 'typeinfo for android::MediaSource'
MxDataSource.cpp(.data.rel.ro+0x18):error: undefined reference to 'typeinfo for android::MediaSource'
MxDataSource.cpp(.data.rel.ro+0x54):error: undefined reference to 'typeinfo for android::MediaSource'
我已经查看了类似问题的 stackoverflow 链接,但无法解决。 任何方向将不胜感激。
谢谢。
【问题讨论】:
-
您能否确认您的编译中是否包含了以下头文件?
<media/stagefright/DataSource.h> , <media/stagefright/MediaBuffer.h>, <media/stagefright/MediaBufferGroup.h>, <media/stagefright/MediaDefs.h>, <media/stagefright/MediaSource.h>, <media/stagefright/MetaData.h> -
您能否也为
frameworks/av/media/libstagefright分享您的Android.mk文件。你能确保MxDataSource放在MediaSource之后并且MediaSource.cpp编译没有任何问题吗? -
再次感谢 Ganesh 的关注。我已经添加了你提到的标题。除此之外,在谷歌搜索了很多之后,我发现了一个标志-fno-rtti。你知道吗?当我在 Application.mk 中添加 APP_CPPFLAGS += -fno-rtti 时,我的编译错误得到了解决。我不知道它是否正确。我在网上搜索这个解决方案时发现的关键词是'virtual'、'-frtti'、'type-casting'等。上面的类有虚函数,派生自MediaSource。当我使用 -frtti 而不是 -fno-rtti 时,错误保持不变。对此有什么想法吗?
-
我没有遇到
APP_CPPFLAGS。我已经集成了一个新的解析器,但我的修改仅限于media/libstagefright文件夹并将相关文件添加到Android.mk。在您的评论中,您提到了Application.mk。你能否分享更多关于你试图在哪里包含你的解析器文件的细节?它是在frameworks/av/media/libstagefright(假设是JB)还是其他文件夹下?请分享有关您的设置的更多详细信息。 -
我正在尝试开发一个可以安装在所有安卓手机上的安卓应用程序。因此,我在 eclipse 中创建了一个项目,其中包含 jni 目录,我在其中定义 Android.mk 和 Application.mk 文件以及我的源文件。在同一个 jni 目录中,我添加了 stagefright 所需的所有包含文件和目录。目前我的 libstagefright.so 和所有标头都是从 Android ICS 构建中检索的。我的项目的 jni 目录下的 Application.mk 中添加了标志 APP_CPPFLAGS。如果我们正在考虑不同的方向,请告诉我。
标签: c++ gcc android-ndk stagefright