は簡単です他の静的ライブラリと静的ライブラリを構築する:の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)
そして、それは動作します。 うまくいけば、他の静的ライブラリを使って静的ライブラリを簡単に構築しなければならないという誤った仮説を立てている他の誰でもこの質問が見つかるはずです。
正しい:NDKビルドには、静的ライブラリをマージ(まだ)サポートしていません。あなたの答えを実際の回答として残し、それを正しいものとしてマークしてください。それは完全に受け入れられます。 –