NDK C++ 编译错误

来源:互联网 发布:gta5pc优化 编辑:程序博客网 时间:2024/05/29 07:27

out/target/product/generic/obj/lib/libOpenSLES.so: undefined reference to `vtable for __cxxabiv1::__vmi_class_type_info'

这说明gold和GNU ld的行为不完全一致。使用linker选项--allow-shlib-undefined可以忽略这个错误。ld手册上说:这个选项会使ld忽略so库内的未定义符号,但是对于命令行上其它.o文件内的未定义符号仍然报错。

因此,可以在相应的Android.mk文件里添加

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

来解决这个问题。

为什么会出现如:error: undefined reference to ‘__cxa_end_cleanup’ 的链接错误。Android上用stlport时。因为没有链接到libstdc++.a。所以出错。 

因为用到了一些静态库, 所以必须要链接完整的libstdc++.a。可以在 
http://crystax.net/android/ndk.php这里下载的包里 
sources\cxx-stl\gnu-libstdc++\libs\armeabi目录中找到。 
Android上本身的libstdc++支持有限,所以必须链接到一个完整的libstdc++.a才行。 
在Android.mk文件中加入 
LOCAL_LDFLAGS = $(LOCAL_PATH)/libs/libcurl.a \ 
$(LOCAL_PATH)/libs/libstdc++.a 
以及LOCAL_CPPFLAGS += -lstdc++就可以编译通过了。 

这样 的话,android上的c++就支持 c++无异常处理、RTTI,c++标准库stl等了。

支持异常处理:
LOCAL_CPPFLAGS += -lstdc++ -fexceptions
STL库:libstlport.a





原创粉丝点击