您现在的位置: Tracy‘Blog > 博客 > Linux > 正文
Android编译错误

        刚到公司就从虚拟机里拖出来一份Android4.2.2的源码,想丢自己机器上编。就能方便修改和测试了,不然要从虚拟机拖出来再移到测试机上,太麻烦。于是呢,就scp了一晚上,唔,还特定格了个盘来放。

        可结果,一编译就报错,大致是xxx  undefined reference 。先前只以为是拷贝的文件不全,然后给刚好有事,就没这折腾了,周五再次拖了一份回来,周末在家鼓捣了下。

        主要是在编译libandroid_runtime.so的时候出错了,错误代码如下:


/home/android/Android_4.2.2_new/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.6/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: out/target/product/vbox86tp/obj/SHARED_LIBRARIES/libandroid_runtime_intermediates/android/opengl/util.o: in function DW.ref.__gxx_personality_v0:util.cpp(.data.DW.ref.__gxx_personality_v0+0x0): error: undefined reference to '__gxx_personality_v0'
/home/android/Android_4.2.2_new/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.6/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: out/target/product/vbox86tp/obj/SHARED_LIBRARIES/libandroid_runtime_intermediates/android_view_Surface.o: in function android::ScreenshotPixelRef::~ScreenshotPixelRef():external/skia/include/core/SkRefCnt.h:33: error: undefined reference to 'std::terminate()'
/home/android/Android_4.2.2_new/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.6/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: out/target/product/vbox86tp/obj/SHARED_LIBRARIES/libandroid_runtime_intermediates/android_view_Surface.o: in function android::ScreenshotPixelRef::~ScreenshotPixelRef():external/skia/include/core/SkRefCnt.h:33: error: undefined reference to 'std::terminate()'
/home/android/Android_4.2.2_new/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.6/bin/../lib/gcc/i686-linux-android/4.6/../../../../i686-linux-android/bin/ld: out/target/product/vbox86tp/obj/SHARED_LIBRARIES/libandroid_runtime_intermediates/android_view_Surface.o: in function android::nativeScreenshot(_JNIEnv*, _jclass*, _jobject*, int, int, int, int, bool):external/skia/include/core/SkRefCnt.h:33: error: undefined reference to 'std::terminate()'
collect2: ld returned 1 exit status
make: *** [out/target/product/vbox86tp/obj/SHARED_LIBRARIES/libandroid_runtime_intermediates/LINKED/libandroid_runtime.so] 错误 1
make:离开目录“/home/android/Android_4.2.2_new”


        就几个文件里,一些符号找不到。然后怎么办呢?找了各种资料,基本上都是再说,gcc编译c++的需要加上-lstdc++之类的。

        然而,跑去./frameworks/base/core/jni/目录下,找到Android.mk,CFLAGS里加上编译选项,还是无效。

        折腾了好久,然后看到了http://blog.csdn.net/andyhuabing/article/details/8591459

        下回来一个r8c版本的ndk,然后对着改了改Android.mk,如下:


STL_PATH=/home/android/android-ndk-r8c/sources/cxx-stl/gnu-libstdc++/4.6/

LOCAL_C_INCLUDES += \
        $(STL_PATH)/include \
        $(STL_PATH)/libs/x86/include \

LOCAL_LDFLAGS += -L$(STL_PATH)/libs/x86 -lgnustl_static -lsupc++
LOCAL_CFLAGS += -fexceptions -frtti


        之后再尝试编译,就过了。

        如果你想看看你编译时的一些详细信息,还可以加下面这个参数:

        

LOCAL_LDFLAGS := -Wl,-v
         这篇文章就做个记录而已~



——Tracy_梓朋

2016年08月29日00:42:39

发表评论(0)
姓名 *
电子邮件
QQ
评论内容 *
验证码 *图片看不清?点击重新得到验证码请输入图片后链接字符‘a’