기존 빌드 환경에서 Android.mk 파일을 자동 생성하려고합니다. 이 환경은 많은 라이브러리를 서로 연결하고 제 3 자 라이브러리 (예 : 부스트)에 링크 할 수도 있습니다.Android.mk : 모듈이 이미 존재하는지 확인하는 방법
부스트를 사용하여 libA
이 있다고 가정 해 봅니다. 목표는 libB 폴더에서 ndk-build를 실행하여 libA
과 libB
을 빌드하는 것입니다.
그래서 나는 libA
이 Android.mk를 생성합니다
LOCAL_PATH := $(call my-dir)
# Import boost
include $(CLEAR_VARS)
LOCAL_MODULE := boost_atomic
LOCAL_SRC_FILES := ../dev/libcpp/boost/1.60.1/lib/libboost_atomic.a
include $(PREBUILT_STATIC_LIBRARY)
# libA:
include $(CLEAR_VARS)
LOCAL_MODULE := libA
LOCAL_SRC_FILES := libA.cpp
LOCAL_C_INCLUDES := ../dev/libcpp/boost/1.60.1
# boost import:
LOCAL_CPPFLAGS += -DHAVE_CONFIG_H -fexceptions -frtti
LOCAL_STATIC_LIBRARIES += boost_atomic
# build libA:
include $(BUILD_SHARED_LIBRARY)
가 지금은
boost
과
libA
을 모두 사용하여
libB
있습니다. 내가
libB
을 할 때
# Import libA
include $(CLEAR_VARS)
LOCAL_MODULE := libA
include ../../libA/jni/Android.mk
, 나는이보고되고있어 :
Android NDK: Trying to define local module 'boost_atomic' in ../../libA/jni/Android.mk.
Android NDK: But this module was already defined by ../../libA/jni/Android.mk.
B:/Android/android-ndk-r11b/build//../build/core/build-module.mk:34: *** Android
NDK: Aborting. . Stop.
인가 나는 다음과 같이 libA
파일의 가져 오기가 추가 된 것을 제외하고 libB
의의 Android.mk
는 libA
매우 유사하다 '의 거기에 boost_atomic
(예 : if (exists boost_atomic)
)이 이미 정의되어 있는지 한 번만 정의되었는지 확인하는 방법이 있습니까? 또는 충돌을 막기 위해 모든 이름 끝에 접미사 (boost_system_for_libA
및 boost_system_for_libB
)를 사용해야합니까? 또는 다른 대안?
* 모듈 정의가 중복되는 것을 피할 수는 있지만, 경우에 따라 부스트를 위해'LOCAL_LDLIBS + = .. /dev/libcpp/boost/1.60.1/lib/libboost_atomic '을 추가하는 것이 더 쉽습니다. a'를 LOCAL_STATIC_LIBRARIES로 추가하는 대신 –
@AlexCohn : 좋은 해결책이 될 것입니다. 내일 한번 해봐. 공유 라이브러리에서도 동일한 작업을 수행 할 수 있습니까? 왜냐하면'libB'와'libA'를 사용하여'libC '를 사용하면 같은 문제가 발생할 것이기 때문에'libA'는 컴파일 할 때'libB'와'libC'에 의해 두 번 정의 될 것입니다. 'libC'. – jpo38
아니요, 사전 빌드되지 않은 libs에서는 작동하지 않으며 LDLIBS에서는 공유 라이브러리를 지정하지 않아야합니다. 그러나 일반적으로 하위 디렉토리의 계층 구조에 따라 Android.mk 파일을 포함시키는 것은 쉽습니다. 이렇게하면 중복을 피할 수 있습니다. –