2017-08-28 278 views
0

最近我试图在Android中使用SiftGPU。我正在使用Linux。所以,首先我下载NDK并使用下面的代码来获得一个独立的工具链:在Android中使用SiftGPU(关于ndk,cmake和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 

然后,我的一些代码添加到的CMakeLists.txt,使其成为:

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) 

之后,我只是去SiftGPU的目录中,创建一个新的文件夹,输入,然后运行:

cmake .. 

到现在为止,一切似乎确定。不过,我运行下面的命令后,好了,不幸的是,这是行不通的:

make 

这里是错误:

[ 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 

我试图谷歌,但我没有得到任何有用的结果。 ndk编译器似乎与SSE不兼容。有人对这个问题有任何想法吗?

+0

ARM没有SSE。这是一个x86 ISA扩展。 ARM具有VFP(标量浮点),NEON(SIMD)或某些CPU,没有浮点硬件。 –

回答

2

看起来他们的CMake文件并不是要交叉编译的。

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

core2仅对x86有效。

你需要通过SiftGPU的CMakeLists.txt来看看是否有交叉编译的选项,如果没有,只需删除该标志。

+0

谢谢你的回复! – Ren