工程支持 RTTI 编译的过程记录

1. 大部分资料指示使用 NDK r5 以上版本,Android.mk 文件设置 APP_STL 为 gnustl_static. 而我需要使用源码 mmm 编译方式,Android 2.3.x 系列源码中内嵌的工具链似乎为 r4 版本。更换源码工具链不现实

2. 按照 NDK 方式期望达到的效果修改 Android.mk, 即 在 LOCAL_CFLAGS 中加入 -frtti
mmm 报错

undefined reference to `typeinfo for android::SortedVectorImpl'
undefined reference to `vtable for __cxxabiv1::__vmi_class_type_inf


3. 参考文章 http://alpha-blog.wanglianghome.org/2011/03/31/undefined-reference/ 继续修改 Android.mk,加入

LOCAL_LDFLAGS := -Wl,--allow-shlib-undefined

编译报错依旧,用 showcommands 查看发现命令似乎不对

 -Wl,--allow-shlib-undefined  -Wl,--no-undefined

多了 -Wl,--no-undefined

4. 查看编译脚本,有关 -Wl,--no-undefined, build/core/binary.mk 有一处

 93 # Certain modules like libdl have to have symbols resolved at runtime and blow
 94 # up if --no-undefined is passed to the linker.
 95 ifeq ($(strip $(LOCAL_NO_DEFAULT_COMPILER_FLAGS)),)
 96 ifeq ($(strip $(LOCAL_ALLOW_UNDEFINED_SYMBOLS)),)
 97   LOCAL_LDFLAGS := $(LOCAL_LDFLAGS) $($(my_prefix)NO_UNDEFINED_LDFLAGS)
 98 endif
 99 endif

Android.mk 中添加一行

LOCAL_ALLOW_UNDEFINED_SYMBOLS := true

编译即可,查看 bionic/libdl/Android.mk 也可确认

转载于:https://www.cnblogs.com/luckybug/archive/2012/04/18/2455627.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值