미리 컴파일 된 라이브러리 미리 만들어진 라이브러리를 사용하여

미리 컴파일 된 라이브러리를 사용하여

NDK는 사용 미리 컴파일 된 라이브러리 (정적 및 공유 라이브러리를 모두 지원)를 지원합니다. 이 기능은 두 가지 주요 사용 사례가 있습니다 :

  • (소스 코드를 배포하지 않음) 써드 파티 개발자에 자신의 라이브러리 NDK를 배포합니다.
  • 컴파일 속도를 향상하기 위해 미리 컴파일 된 버전의 자신의 라이브러리를 사용합니다.

이 페이지는 미리 컴파일 된 라이브러리를 사용하는 방법에 대해 설명합니다.

문 미리 컴파일 된 라이브러리

각 문에 대해 미리 컴파일 된 라이브러리는 별도의 모듈로 자신을 사용해야합니다. 이렇게하려면 다음 단계를 수행하십시오 :

  1. 모듈의 이름을 입력합니다. 이 이름은 반드시 같은 이름의 미리 컴파일 된 라이브러리 자체가 아닙니다.
  2. 모듈에서  Android.mk 파일, 미리 컴파일 된 라이브러리의 경로는 당신이 할당 제공합니다  LOCAL_SRC_FILES. 지정  LOCAL_PATH 변수로의 상대 값.

    참고 : 대상은 ABI에 대응하는 라이브러리의 미리 컴파일 된 버전을 선택해야합니다. 라이브러리가 ABI를 지원하는지 확인하는 방법에 대한 자세한 내용을 참조하시기 바랍니다 ABI 미리 컴파일 된 라이브러리를 선택합니다 .

  3. 당신이 공유 라이브러리 (사용에 따라 .so) 또는 정적 라이브러리 ( .a), 추가  PREBUILT_SHARED_LIBRARY 또는  PREBUILT_STATIC_LIBRARY.

다음 예는 작은 도서관을 미리 컴파일 된 것으로 가정  libfoo.so 하고 설명  Android.mk 같은 디렉토리에 파일을.

    LOCAL_PATH : = $ (내-DIR 전화) 

    $ (CLEAR_VARS)를 포함 
    LOCAL_MODULE를 = foo는-미리 만들어진 
    LOCAL_SRC_FILES을 =이 libfoo.so 
    $을 포함 (PREBUILT_SHARED_LIBRARY를)
    
 

이 예에서, 동일한 모듈 이름 및 컴파일 된 라이브러리 명.

당신은 배치 미리 컴파일 된 사본의 공유 라이브러리 컴파일됩니다  $PROJECT/obj/local 에, 그리고 사본은 다른 추출 디버그 정보가 배치 될 것  $PROJECT/libs/<abi> 입니다. 여기에 $PROJECT 프로젝트의 루트 디렉토리입니다.

다른 모듈에서 참조는 라이브러리를 컴파일 사전

다른 모듈에서 참조는 다음과 관련된 모듈, 라이브러리를 사전 컴파일 된  Android.mk 파일을 미리 컴파일 된 라이브러리의 이름을 지정  LOCAL_STATIC_LIBRARIES 또는  LOCAL_SHARED_LIBRARIES 변수입니다.

예를 들어, 사용하는  libfoo.so 모듈은 다음 지침과 유사 할 수 있습니다 :

    $ (CLEAR_VARS)를 포함 
    LOCAL_MODULE을 : foo는 사용자 = 
    LOCAL_SRC_FILES을 : foo는-user.c의 = 
    LOCAL_SHARED_LIBRARIES은 : foo는-사전 구축이 = 
    (BUILD_SHARED_LIBRARY) $을 포함
    
 

다음 LOCAL_MODULE 모듈 미리 컴파일 된 라이브러리의 참조 이름은, LOCAL_SHARED_LIBRARIES 미리 컴파일 된 라이브러리 이름 자체.

수출 미리 컴파일 된 헤더 라이브러리

foo-user.c 일반적으로 위치 코드는 헤더 파일 (예를 들어,에 따라  foo.h특정 문), 헤더 파일은 미리 컴파일 된 라이브러리를 사용하여 할당됩니다. 예를 들어, foo-user.c 다음과 비슷한 코드 줄이있을 수 있습니다 :

    #INCLUDE <foo.h> 
   
 

당신이 컴파일하는 경우이 경우,  foo-user 모듈을, 당신은 헤더와 자신의 경로 컴파일러를 포함하는 점을 제공해야합니다. 이 작업을 수행하는 간단한 방법은 미리 컴파일 된 모듈 정의에서 내보내기 컨텐츠를 사용하는 것입니다. 예를 들어, 한 헤더는 다음과 같이  foo.h 미리 컴파일 된 모듈과 관련 위치한  include 디렉토리, 당신은 다음과 같은 방식으로 선언 할 수 있습니다 :

    $ (CLEAR_VARS)를 포함 
    LOCAL_MODULE을 : foo는-미리 작성된 = 
    = libfoo.so : LOCAL_SRC_FILES 
    LOCAL_EXPORT_C_INCLUDES : = $ (LOCAL_PATH) / 포함 
    $을 포함을 (PREBUILT_SHARED_LIBRARY)
    
 

여기  LOCAL_EXPORT_C_INCLUDES 미리 컴파일 된 라이브러리에 그 수출 지점 보장합니다 컴파일러 시스템의 정의  include 모듈이 추가로 해당 경로에 따라 달라집니다에 대한 디렉토리 경로를  LOCAL_C_INCLUDES 값.

이 시스템은 필요한 헤더를 찾을 수있는 컴파일러를 할 수 있습니다.

디버그 미리 컴파일 된 라이브러리

우리는 당신이 디버깅 심볼을 포함 미리 컴파일 된 공유 라이브러리를 제공하는 것이 좋습니다. NDK는 항상에 설치에서 시스템을 구축  $PROJECT/libs/<abi>/ 하는 라이브러리의 버전 추출 상징,하지만 당신은에 의해 디버그 버전을 사용할 수 있습니다  ndk-gdb 디버깅.

ABI 미리 컴파일 된 라이브러리를 선택

의 공유 라이브러리의 올바른 버전을 선택해야합니다 대상 ABI에 대한 사전 컴파일. Android.mk 파일  TARGET_ARCH_ABI 변수는 해당 라이브러리 시스템 포인트의 버전을 컴파일 할 수 있습니다.

예를 들어, 프로젝트 라이브러리가 있다고 가정 해  libfoo.so 다음과 같은 두 가지 버전을 :

    armeabi / libfoo.so 
    86 / libfoo.so
    
 

다음 코드는 사용하는 방법을 보여줍니다  TARGET_ARCH_ABI라이브러리의 해당 버전을 선택하도록 시스템을 컴파일하기 위해 :

    $ (CLEAR_VARS)를 포함 
    LOCAL_MODULE을 : foo는-미리 작성된 = 
    = $ (TARGET_ARCH_ABI) /libfoo.so : LOCAL_SRC_FILES 
    LOCAL_EXPORT_C_INCLUDES : = $ (LOCAL_PATH) / 포함 
    $을 포함을 (PREBUILT_SHARED_LIBRARY)
    
 

당신이 경우  armeabi 로 지정된  TARGET_ARCH_ABI 값, 컴파일러에있는 시스템을 사용하는  armeabi 디렉토리  libfoo.so 버전. 당신이 경우  x86 로 지정된  TARGET_ARCH_ABI 값, 컴파일러는 시스템 사용  x86 디렉토리 버전.

추천

출처www.cnblogs.com/gamesky/p/11369172.html