Я пытаюсь кросс-компилировать LLVM для Android NDK, но мой вызов CMake терпит неудачу. Я использую Ubuntu 16.04.
Я скачал исходный код LLVM (llvm версии 3.8) и Android NDK (загруженный на смонтированный диск, если это имеет значение), и я следовал инструкциям, приведенным в файле Android.cmake в [path to LLVM Источник] / CMake / платформы:
# Android.cmake
# Toolchain config for Android NDK.
# This is expected to be used with a standalone Android toolchain (see
# docs/STANDALONE-TOOLCHAIN.html in the NDK on how to get one).
#
# Usage:
# mkdir build; cd build
# cmake ..; make
# mkdir android; cd android
# cmake -DLLVM_ANDROID_TOOLCHAIN_DIR=/path/to/android/ndk \
# -DCMAKE_TOOLCHAIN_FILE=../../cmake/platforms/Android.cmake ../..
# make <target>
SET(CMAKE_SYSTEM_NAME Linux)
IF(NOT CMAKE_C_COMPILER)
SET(CMAKE_C_COMPILER /usr/bin/clang)
ENDIF()
IF(NOT CMAKE_CXX_COMPILER)
SET(CMAKE_CXX_COMPILER /usr/bin/clang++)
ENDIF()
SET(ANDROID "1" CACHE STRING "ANDROID" FORCE)
SET(ANDROID_COMMON_FLAGS "-target arm-linux-androideabi --sysroot=${LLVM_ANDROID_TOOLCHAIN_DIR}/sysroot -B${LLVM_ANDROID_TOOLCHAIN_DIR}")
SET(CMAKE_C_FLAGS "${ANDROID_COMMON_FLAGS}" CACHE STRING "toolchain_cflags" FORCE)
SET(CMAKE_CXX_FLAGS "${ANDROID_COMMON_FLAGS}" CACHE STRING "toolchain_cxxflags" FORCE)
SET(CMAKE_EXE_LINKER_FLAGS "-pie" CACHE STRING "toolchain_exelinkflags" FORCE)
Но ошибка, которую я получаю при вызове CMake как cmake -DLLVM_ANDROID_TOOLCHAIN_DIR=/media/alvin/Windows8_OS/Android/Sdk/ndk-bundle -DCMAKE_TOOLCHAIN_FILE=../llvm-3.8.0.src/cmake/platforms/Android.cmake ../llvm-3.8.0.src
:
CMake Error at /usr/share/cmake-3.5/Modules/CMakeTestCCompiler.cmake:61 (message):
The C compiler "/usr/bin/clang" is not able to compile a simple test
program.
It fails with the following output:
Change Dir: /media/alvin/Windows8_OS/LLVM/and-build/CMakeFiles/CMakeTmp
Run Build Command:"/usr/bin/make" "cmTC_1e02b/fast"
/usr/bin/make -f CMakeFiles/cmTC_1e02b.dir/build.make
CMakeFiles/cmTC_1e02b.dir/build
make[1]: Entering directory
'/media/alvin/Windows8_OS/LLVM/and-build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_1e02b.dir/testCCompiler.c.o
/usr/bin/clang -target arm-linux-androideabi
--sysroot=/media/alvin/Windows8_OS/Android/Sdk/ndk-bundle/sysroot
-B/media/alvin/Windows8_OS/Android/Sdk/ndk-bundle -o
CMakeFiles/cmTC_1e02b.dir/testCCompiler.c.o -c
/media/alvin/Windows8_OS/LLVM/and-build/CMakeFiles/CMakeTmp/testCCompiler.c
Linking C executable cmTC_1e02b
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_1e02b.dir/link.txt
--verbose=1
/usr/bin/clang -target arm-linux-androideabi
--sysroot=/media/alvin/Windows8_OS/Android/Sdk/ndk-bundle/sysroot
-B/media/alvin/Windows8_OS/Android/Sdk/ndk-bundle -pie
CMakeFiles/cmTC_1e02b.dir/testCCompiler.c.o -o cmTC_1e02b -rdynamic
/usr/bin/ld: unrecognised emulation mode: armelf_linux_eabi
Supported emulations: elf_x86_64 elf32_x86_64 elf_i386 elf_iamcu i386linux
elf_l1om elf_k1om i386pep i386pe
clang: error: linker command failed with exit code 1 (use -v to see
invocation)
CMakeFiles/cmTC_1e02b.dir/build.make:97: recipe for target 'cmTC_1e02b'
failed
make[1]: *** [cmTC_1e02b] Error 1
make[1]: Leaving directory
'/media/alvin/Windows8_OS/LLVM/and-build/CMakeFiles/CMakeTmp'
Makefile:126: recipe for target 'cmTC_1e02b/fast' failed
make: *** [cmTC_1e02b/fast] Error 2
CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt:54 (project)
Кажется, что при соединении возникает проблема: "clang: error: команда линкера завершилась неудачно с кодом выхода 1", но я понятия не имею, как это исправить. У кого-нибудь есть понимание, как решить эту проблему?
РЕДАКТИРОВАТЬ: я использую clang-3.8 и llvm source version 3.8, если это имеет значение.