다른 툴체인을 사용하도록 Android NDK에 지시하는 방법

Phonon 09/02/2017. 3 answers, 18.326 views
android android android-ndk android-ndk toolchain

ARM 기반의 Android 앱을 개발하기 위해 맞춤 툴 체인 ( linaro )을 다운로드했습니다. NDK가 그것을 사용하도록 어떻게 말합니까? Android.mk와 Application.mk에서 뭔가를 정의하거나 설정할 수 있습니까? 다른 방법이 있습니까?

1 Comments
corbin 03/08/2012
우분투에서이 작업을 수행 했습니까? 툴체인은 어떻게 설치 했습니까?

3 Answers


Peter M 03/01/2013.

다른 답변에서 언급 한 바와 같이 toolchains는 $(NDK_ROOT)/toolchains/ 에있는 ndk-build makefile 시스템에 의해 발견되며 거기에있는 아이디어를 반영 할 수 있습니다. 하지만 Android 기반이 아닌 플랫폼을 지원하기위한 몇 가지 추가 개념이 있습니다. ndk-build가 다른 플랫폼을 명시 적으로 지원하기 시작하면 win32 (또는 일반 'ol Linux'를 대상으로하는 기타 gcc 컴파일러) .

config.mk :

TOOLCHAIN_ABIS := (list of ABIs that the toolchain supports) 

이는 중요한 정의입니다. Application.mk에서이 이름을 사용하여 특정 ABI에 대한 도구 체인을 사용하여 빌드 할 수 있기 때문입니다. 이 정의의 사용을 손상시키는 이점 중 하나는 ndk-build가 동시에 여러 ABI를 빌드 할 수 있다는 것입니다. always 플랫폼이 Android라고 가정하지만 mingw 기반 툴체인을 사용하여 win32를 대상으로하려면 "ABI"를 x86-win32 로 정의한 다음 Application.mk 에서이 ABI를 사용하여 추가로 선택하십시오 APP_ABI:= x86-win32 를 통해 타겟팅하십시오 Android.mk 파일에서 TARGET_ARCH_ABI 정의를 사용하여 win32 특정 소스를 선택하고 경로를 포함 할 수 있습니다 (예 :

ifeq ($(TARGET_ARCH_ABI),x86-win32)
  LOCAL_SRC_FILES += my_win32_file.c
  LOCAL_CFLAGS += -DSOME_WIN32_SPECIFIC
endif 

마지막 부분은 툴체인을위한 setup.mk 에서 다른 툴체인을 예로 setup.mk 에는 충분하지 않을 수 있습니다. 특정 툴체인을위한 setup.mkdefault-build-commands.mk 빌드 설정을 덮어 setup.mk 것이기 때문에 당신이하고 싶은 것은 그 파일을 검사하고, 당신이 싫어하는 것을 다시 정의하는 것입니다.

앞의 예에서 mingw는 바이너리의 noexec 플래그를 지원하지 않으므로 setup.mk 다음 줄을 추가하여이 기능을 제거 할 수 있습니다.

# These flags are used to enforce the NX (no execute) security feature in the
# generated machine code. This adds a special section to the generated shared
# libraries that instruct the Linux kernel to disable code execution from
# the stack and the heap.
TARGET_NO_EXECUTE_CFLAGS  := # our platform doesn't support this flag!
TARGET_NO_EXECUTE_LDFLAGS := # our platform doesn't support this flag!

# These flags disable the above security feature
TARGET_DISABLE_NO_EXECUTE_CFLAGS  :=  # our platform doesn't support this flag!
TARGET_DISABLE_NO_EXECUTE_LDFLAGS :=  # our platform doesn't support this flag! 

이는 default-build-commands.mk 의 많은 기능 중 하나 일뿐입니다.이 기능은 무시해야 할 수도 있습니다. 물론 NDK_TOOLCHAIN Application.mk 파일 내에서 NDK_TOOLCHAIN 변수를 통해 선택할 수 있도록 TOOLCHAIN_NAME 을 제공하는 것이 중요합니다. 위에서 언급 한 ABI 방법론으로


Ian Ni-Lewis 09/12/2013.

NDK makefile 시스템은 확장 성이 뛰어나며 실제로 다른 툴체인을 정의 할 수 있습니다. Make가 어떻게 작동하는지 이해해야합니다.

툴체인은 build/core/init.mk 라인 261에서 발견되고 초기화됩니다 (NDKr6에서, 라인 #은 이후 버전에서 변경 될 수 있습니다). 초기화 코드는 $(NDK_ROOT)/toolchains/* config.mk 라는 파일을 찾습니다. 따라서 툴 체인을 NDK 툴 체인 디렉토리 아래의 서브 디렉토리에 추가하고 그 서브 디렉토리에 config.mksetup.mk 를 추가해야합니다. toolchains/x86-4.4.3toolchains/x86-4.4.3toolchains/arm-linux-androideabi-4.4.3 을보십시오. 도구 모음에 표준 레이아웃이있는 경우 ARM 도구 모음 config.mksetup.mk 를 잘라내어 붙여 넣을 수 있어야합니다.

toolchain 디렉토리에 툴체인을 정의한 후에는 Application.mk 파일 내에 NDK_TOOLCHAIN 변수를 설정하여 툴체인으로 전환 할 수 있습니다.


lily 07/31/2017.

글쎄, 간단하게 "NDK_TOOLCHAIN_VERSION = 4.9"를 Application.mk에 추가 할 수있다.

Related questions

Hot questions

Language

Popular Tags