【发布时间】:2017-03-29 09:06:16
【问题描述】:
我想使用 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); }
Android.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 的 lib 文件
然后,我将它与之前的构建输出进行比较。
我发现 .so 文件的不同之处。 gnustl_static 选项的 .so 文件比 gnustl_shared 选项的大。 但是 .a 是一样的。
为什么? 我使用了 nm,readelf 但找不到区别。 什么是差异???
【问题讨论】:
-
如果您只为您的 Android 项目创建一个共享库,您可以使用其中任何一个。如果您的 Android 项目包含多个共享库,则需要使用共享版本。
标签: c++ android-ndk gnu visualgdb