android framework添加对C++的支持

最近在将C++ STL写的模块移植到frameworks/av/media中,遇到了很多编译方面的问题,通过努力,顺利编译通过,下面将过程记录一下,以便以后参考:

下面的方法在android-5.1.1_r9上测试过,编译选项aosp_x86。

1. android默认不支持C++ STL,虽然在NDK已经可以支持了。

    如果需要支持STL,则需要手动添加一些静态库和链接库,从而达到可以支持STL的目的。


2. STL模块函数找不到,链接失败

stdc++/include/bits/stl_list.h:466: error: undefined reference to '__cxa_end_catch
stdc++/include/bits/stl_list.h:469: error: undefined reference to '__cxa_rethrow'
nal_baseD1Ev+0x0): error: undefined reference to '__gxx_personality_v0'
这是缺libsupc++.a


Android.mk
LOCAL_SHARED_LIBRARIES += \
libstlport\


prebuilt_stdcxx_PATH := prebuilts/ndk/current/sources/cxx-stl


LOCAL_C_INCLUDES := $(LOCAL_PATH) \
$(TOP)/frameworks/av/media/libstagefright \
bionic \
external/stlport/stlport \

LOCAL_LDFLAGS :=  -L$(prebuilt_stdcxx_PATH)/gnu-libstdc++/libs/$(TARGET_CPU_ABI) -lsupc++ -L$(prebuilt_stdcxx_PATH)/gabi++/libs/$(TARGET_CPU_ABI) -lstdc++ -lgabi++
LOCAL_LDLIBS := -lstdc++ $(prebuilt_stdcxx_PATH)/gnu-libstdc++/libs/armeabi/libsupc++.a


LOCAL_CFLAGS    := -Werror -fexceptions \
-O0 -g -Wno-unused-parameter \
-Wno-error=unused-variable \
-Wno-sign-compare -Wno-switch   \
                -std=gnu++11

3. 由于android的原生代码里没有对list的支持,因此,需要将list的头文件替换掉,最好是替换为vector,用vector的方法来编译

4. android 的ABuffer是在namespace android中定义的,因此,需要将引用该类的文件包含在namespace android中。

5. when you meet an error which is about "undefined reference to '__gxx_personality_v0'", the only one problem maybe that there are many stdc++ reference. You need delete all the other "stdc++" except the last one. Just as in LOCAL_LDFLAGS above.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值