我想使用 c++ stl 创建 android 库。
我的构建工具是 Visual Studio 2015、Visual GDB。
源代码是
.cpp
#include <jni.h>
#include "AndroidProject2.h"
#include <vector>
void foo() { std::vector<int> aaa; aaa.push_back(1); }
安卓.mk
# Generated by VisualGDB
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := AndroidProject2-shared
LOCAL_SRC_FILES := AndroidProject2.cpp
COMMON_SRC_FILES := $(LOCAL_SRC_FILES)
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := AndroidProject2-static
LOCAL_SRC_FILES := $(COMMON_SRC_FILES)
include $(BUILD_STATIC_LIBRARY)
应用程序.mk
APP_MODULES := AndroidProject2-static AndroidProject2-shared
APP_ABI := all
APP_STL := gnustl_static
NDK_TOOLCHAIN_VERSION :=4.9
我成功构建了,所以,创建了 lib 文件 libAndroidProject2-static.a、libAndroidProject2-static.so
比,我尝试更改 Application.mk 中的 APP_STL 选项
APP_MODULES := AndroidProject2-static AndroidProject2-shared
APP_ABI := all
APP_STL := gnustl_shared
NDK_TOOLCHAIN_VERSION :=4.9
当然,成功构建。因此,创建了 libAndroidProject2-shared.a、libAndroidProject2-shared.so 文件
比,我比较它和以前的构建输出。
我发现了 .so 文件的不同之处。gnustl_static 选项的 .so 文件比 gnustl_shared 选项的大。但是 .a 是一样的。
为什么?我使用了 nm,readelf 但找不到区别。什么是差异???