我想用C++ stl創建android庫。Android NDK庫.a文件中gnustl_shared和gnustl_static之間的區別是什麼?
我的構建工具是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)
Application.mk
APP_MODULES := AndroidProject2-static AndroidProject2-shared
APP_ABI := all
APP_STL := gnustl_static
NDK_TOOLCHAIN_VERSION :=4.9
我成功構建,因此,創建LIB文件libAndroidProject2 -static.a,l ibAndroidProject2-static.so
比,我試圖改變APP_STL選項Application.mk
APP_MODULES := AndroidProject2-static AndroidProject2-shared
APP_ABI := all
APP_STL := gnustl_shared
NDK_TOOLCHAIN_VERSION :=4.9
肯定,成功構建。所以,創建lib文件libAndroidProject2-shared.a,libAndroidProject2-shared.so
比,我比較它和以前的構建輸出。
我發現了關於.so文件的區別。 gnustl_static選項的.so文件比gnustl_shared選項更大。 但是.a是一樣的。
爲什麼? 我用nm,readelf但是找不到差別。 什麼是差距?
如果您只爲Android項目創建一個共享庫,則可以使用其中一個。如果您的Android項目由多個共享庫組成,您將需要使用共享版本。 –