Android application链接c++库

来源:互联网 发布:python hadoop 编辑:程序博客网 时间:2024/03/29 14:58
APP_STL := gnustl_static
指定application里要链接的标准c++库。如果不指定,默认情况下,使用最小化的c++运行时系统库。
但是似乎APP_STL只是对动态库有效,如果是exe程序,则没有效果(据说是ndkr6的一个bug),需要显示地指定用gnustl_static。
如Android.mk里:
LOCAL_STATIC_LIBRARIES := libTest1 libTest2 gnustl_static

从android-ndk-r6b\sources\cxx-stl\gnu-libstdc++\Android.mk内容:
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := gnustl_static
LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libstdc++.a
LOCAL_EXPORT_CPPFLAGS := -fexceptions -frtti
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include \
                           $(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)

可知,gnustl_static其实就是LOCAL_MODULE 名字,指定了c++库用gnu的libstdc++.a静态库。
既然APP_STL对exe程序无效,那么在exe的make中显示地指定要链接的c++库对应的LOCAL_MODULE名字为gnustl_static。在NDK中编译exe的时候,编译器是能识别到LOCAL_MODULE名字为gnustl_static的module的。所以编译exe就能正常work了。

在ndk-build 加参数V=1可以查看编译时的详细参数输出,如NDK自带的gcc的路径。