2017-11-09 4 views
1

は簡単です他の静的ライブラリと静的ライブラリを構築する:のAndroid NDK:私が何をしようとしています何

私はアンドロイドのためのOpenSSLをコンパイルしていると私は私には、OpenSSL前の静的ライブラリに構築したいいくつかのカスタムコードを持っています - 組み込みライブラリが含まれています。 これは私が私のAndroid.mkファイルの設定持っているかである:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := a-ssl 
LOCAL_SRC_FILES := {PATH_TO_PROJECT}/vendor/android-openssl/prebuilt/$(TARGET_ARCH_ABI)/libcrypto.a 
include $(PREBUILT_STATIC_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := a-crypto 
LOCAL_SRC_FILES := {PATH_TO_PROJECT}/vendor/android-openssl/prebuilt/$(TARGET_ARCH_ABI)/libssl.a 
include $(PREBUILT_STATIC_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_STATIC_LIBRARIES := a-ssl a-crypto 
LOCAL_C_INCLUDES += {PATH_TO_PROJECT}/vendor/android-openssl/openssl/include 
LOCAL_MODULE := project-alib 
LOCAL_SRC_FILES := ../../source.c 
include $(BUILD_STATIC_LIBRARY) 

今、この作品を、しかし、それがすべてでOpenSSLライブラリが含まれていません。 $(BUILD_STATIC_LIBRARY$(BUILD_SHARED_LIBRARY)に変更すると、すべてがその共有ライブラリに正しく結合されているように見えます。

しかし、それは私のプロジェクト仕様の下ではありません。

私は何か完全に間違っているのでしょうか?

ソリューションEDIT

は実際に可能な解決策を発見しました。単に静的ライブラリを構築するときに静的ライブラリを追加し、実際のAndroidのラッパーがそうのように構築されているときにそれらを追加しないでください:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := project-alib 
LOCAL_SRC_FILES := {PATH_TO_PROJECT}/project-alib/$(TARGET_ARCH_ABI)/libproject-alib.a 
LOCAL_EXPORT_C_INCLUDES := ../../includes 
include $(PREBUILT_STATIC_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := a-crypto 
LOCAL_SRC_FILES := {PATH_TO_PROJECT}/vendor/android-openssl/prebuilt/$(TARGET_ARCH_ABI)/libcrypto.a 
include $(PREBUILT_STATIC_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := a-ssl 
LOCAL_SRC_FILES := {PATH_TO_PROJECT}/vendor/android-openssl/prebuilt/$(TARGET_ARCH_ABI)/libssl.a 
include $(PREBUILT_STATIC_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := project-alib-wrapper 
LOCAL_C_INCLUDES += {PATH_TO_PROJECT}/includes 
LOCAL_SRC_FILES := wrapper.c 
LOCAL_STATIC_LIBRARIES := project-alib a-ssl a-crypto 
include $(BUILD_SHARED_LIBRARY) 

そして、それは動作します。 うまくいけば、他の静的ライブラリを使って静的ライブラリを簡単に構築しなければならないという誤った仮説を立てている他の誰でもこの質問が見つかるはずです。

+1

正しい:NDKビルドには、静的ライブラリをマージ(まだ)サポートしていません。あなたの答えを実際の回答として残し、それを正しいものとしてマークしてください。それは完全に受け入れられます。 –

答えて

0

NDKには、必要なコマンドがあります。LOCAL_EXPORT_STATIC_LIBRARIESです。

include $(CLEAR_VARS) 
LOCAL_EXPORT_STATIC_LIBRARIES := a-ssl a-crypto 
LOCAL_C_INCLUDES += $(PATH_TO_PROJECT)/vendor/android-openssl/openssl/include 
LOCAL_MODULE := project-alib 
LOCAL_SRC_FILES := ../../source.c 
include $(BUILD_STATIC_LIBRARY) 

また、OpenSSLが-sslのからのパスを含んで継承できます。最後に、もう少しこれをクリーンアップするために、あなたのAndroid.mk内のモジュールの順序を変更することを検討:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_EXPORT_STATIC_LIBRARIES := a-ssl a-crypto 
LOCAL_MODULE := project-alib 
LOCAL_SRC_FILES := ../../source.c 
include $(BUILD_STATIC_LIBRARY) 

LOCAL_PATH := $(PATH_TO_PROJECT)/vendor/android-openssl 

include $(CLEAR_VARS) 
LOCAL_MODULE := a-ssl 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/openssl/include 
LOCAL_SRC_FILES := $(LOCAL_PATH)/prebuilt/$(TARGET_ARCH_ABI)/libcrypto.a 
include $(PREBUILT_STATIC_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := a-crypto 
LOCAL_SRC_FILES := $(LOCAL_PATH)/prebuilt/$(TARGET_ARCH_ABI)/libssl.a 
include $(PREBUILT_STATIC_LIBRARY) 
+1

多くのありがとうございます。私は基本的に私自身のソリューションとあなたのものとのミックスを行った。 – karmalis

関連する問題