使用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 statusmake: *** [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模式编译,必须强制改变)
参考:?utm_source=tuicool
转载请注明出处:
回避现实的人,未来将更不理想。