2017-08-28 5 views
0

Récemment, j'essaie d'utiliser SiftGPU dans Android. J'utilise le Linux. Alors, tout d'abord télécharger un NDK et utiliser le code suivant pour obtenir une toolchain autonome:Utilisation de SiftGPU dans Android (sur ndk, cmake et SSE)

sudo sh ./build/tools/make-standalone-toolchain.sh --verbose --platform=android-15 --install-dir=/home/YourUserName/Downloads/my-tool --toolchain=arm-linux-androideabi-4.9 

, ajouter ensuite les quelques codes à CMakeLists.txt il devient:

CMAKE_MINIMUM_REQUIRED(VERSION 2.6) 

PROJECT(SIFTGPU C CXX) 

set(NDK_STANDALONE_TOOLCHAIN /home/YourUserName/Downloads/my-tool/) 
set(CMAKE_SYSTEM_NAME Android) 
set(CMAKE_SYSTEM_VERSION 15) 
set(CMAKE_C_COMPILER ${NDK_STANDALONE_TOOLCHAIN}/bin/arm-linux-androideabi-gcc) 
set(CMAKE_CXX_COMPILER ${NDK_STANDALONE_TOOLCHAIN}/bin/arm-linux-androideabi-g++) 
set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a) 
set(CMAKE_FIND_ROOT_PATH ${NDK_STANDALONE_TOOLCHAIN}) 
add_definitions("--sysroot=${NDK_STANDALONE_TOOLCHAIN}/sysroot") 
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-write-strings -Wno-unused-result -Wno-deprecated -fPIC") 
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-write-strings -Wno-unused-result -Wno-deprecated -fPIC") 

ADD_SUBDIRECTORY(src) 

Après cela , je vais simplement dans le répertoire de SiftGPU, créez un nouveau dossier, entrez, et lancez:

cmake .. 

Jusqu'à présent, tout semble ok. Cependant, après que j'exécutez la commande suivante, eh bien, malheureusement, cela ne fonctionne pas:

make 

Et voici l'erreur:

[ 9%] Building CXX object src/SiftGPU/CMakeFiles/siftgpu.dir/FrameBufferObject.cpp.o 
arm-linux-androideabi-g++: error: unrecognized argument in option '-march=core2' 
arm-linux-androideabi-g++: note: valid arguments to '-march=' are: armv2 armv2a armv3 armv3m armv4 armv4t armv5 armv5e armv5t armv5te armv6 armv6-m armv6j armv6k armv6s-m armv6t2 armv6z armv6zk armv7 armv7-a armv7-m armv7-r armv7e-m armv7ve armv8-a armv8-a+crc iwmmxt iwmmxt2 native 
arm-linux-androideabi-g++: error: unrecognized command line option '-mfpmath=sse' 
src/SiftGPU/CMakeFiles/siftgpu.dir/build.make:62: recipe for target 'src/SiftGPU/CMakeFiles/siftgpu.dir/FrameBufferObject.cpp.o' failed 
make[2]: *** [src/SiftGPU/CMakeFiles/siftgpu.dir/FrameBufferObject.cpp.o] Error 1 
CMakeFiles/Makefile2:103: recipe for target 'src/SiftGPU/CMakeFiles/siftgpu.dir/all' failed 
make[1]: *** [src/SiftGPU/CMakeFiles/siftgpu.dir/all] Error 2 
Makefile:127: recipe for target 'all' failed 
make: *** [all] Error 2 

J'ai essayé de google mais je n'ai pas tout résultat utile. Il semble que le compilateur ndk n'est pas compatible avec SSE. Est-ce que quelqu'un a une idée de cette question?

+0

ARM n'a pas de SSE. C'est une extension ISA x86. ARM a VFP (virgule flottante scalaire), NEON (SIMD), ou sur certains processeurs, pas de matériel à virgule flottante. –

Répondre

2

On dirait que leurs fichiers CMake n'étaient pas destinés à être compilés de manière croisée.

arm-linux-androideabi-g++: error: unrecognized argument in option '-march=core2'

core2 n'est valide que pour x86.

Vous devez jeter un coup d'oeil dans CMakeLists.txt de SiftGPU pour voir s'il y a des options pour la compilation croisée, et si non, juste enlever cet indicateur.

+0

Merci pour votre réponse! – Ren