在Android中使用SiftGPU(关于ndk,cmake和SSE)

时间:2017-08-28 02:57:14

标签: android cmake android-ndk sse

最近我试图在Android中使用SiftGPU。我正在使用Linux。所以,首先我下载一个ndk并使用以下代码来获得一个独立的工具链:

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不兼容。有没有人对这个问题有任何想法?

1 个答案:

答案 0 :(得分:2)

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

  

arm-linux-androideabi-g ++:错误:选项'-march = core2'中无法识别的参数

core2仅对x86有效。

您需要查看SiftGPU的CMakeLists.txt以查看是否有交叉编译选项,如果没有,只需删除该标记。