2017-11-09 4 views
1

는 내가 뭘하려고 간단합니다 - 빌드 된 라이브러리가 포함되어 있습니다. 그러나 그것은 전혀하려면 openssl 라이브러리를 포함하지 않는,안드로이드 NDK는 :</p> <p>나는 안드로이드를위한 OpenSSL을 컴파일하고 난 OpenSSL을 사전에 정적 라이브러리로 구축하려는 일부 사용자 지정 코드를 : 다른 정적 라이브러리와 정적 라이브러리를 구축

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) 

지금이 작품 : 이 내가 설정 내 Android.mk 파일이 방법이다. $(BUILD_STATIC_LIBRARY$(BUILD_SHARED_LIBRARY)으로 변경하면 모든 것이 해당 공유 라이브러리에 올바르게 결합 된 것처럼 보입니다.

하지만 내 프로젝트 사양이 무엇인지는 알 수 없습니다.

아마도 나는 완전히 잘못된 것을하고 있습니까?

솔루션 편집은

실제로 가능한 해결책을 발견했다. 단순히 정적 라이브러리를 구축 할 때 정적 라이브러리를 추가하고 실제 안드로이드 래퍼과 같이 구축 될 때 추가하지 않습니다

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을 상속 할 수는 A-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