在Android中使用SiftGPU(关于ndk,cmake和SSE)
问题描述:
最近我试图在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不兼容。有人对这个问题有任何想法吗?
答
看起来他们的CMake文件并不是要交叉编译的。
arm-linux-androideabi-g++: error: unrecognized argument in option '-march=core2'
core2仅对x86有效。
你需要通过SiftGPU的CMakeLists.txt来看看是否有交叉编译的选项,如果没有,只需删除该标志。
+0
谢谢你的回复! – Ren
ARM没有SSE。这是一个x86 ISA扩展。 ARM具有VFP(标量浮点),NEON(SIMD)或某些CPU,没有浮点硬件。 –