使用Android非公开API编译工程时,出现以下错误:
/home/scm/Android/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/hello-jni/AVFormatSource.o: in function typeinfo for android::AVFormatSource:AVFormatSource.cpp(.data.rel.ro+0x8): error: undefined reference to 'typeinfo for android::MediaSource'
/home/scm/Android/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/hello-jni/AVFormatSource.o: in function construction vtable for android::MediaSource-in-android::AVFormatSource:AVFormatSource.cpp(.data.rel.ro+0x18): error: undefined reference to 'typeinfo for android::MediaSource'
/home/scm/Android/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/hello-jni/AVFormatSource.o: in function construction vtable for android::MediaSource-in-android::AVFormatSource:AVFormatSource.cpp(.data.rel.ro+0x54): error: undefined reference to 'typeinfo for android::MediaSource'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/libhello-jni.so] Error 1
原因:工程使用了系统库libstagefright.so,而该库是Android系统用no-rtti方式编译出来的,因此我们的工程也必须要用no-rtti方式编译。
解决方法:在Application.mk中,将 APP_CPPFLAGS := -frtti 改为 APP_CPPFLAGS := -fno-rtti(Android默认使用-frtti模式编译,必须强制改变)
参考:http://www.cnblogs.com/beautiful-scenery/p/3589529.html?utm_source=tuicool
转载请注明出处:http://blog.youkuaiyun.com/chameleons/article/details/36664219