欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4359|回復: 0
打印 上一主題 下一主題
收起左側

Opencv3.1.0移植/人臉識別

[復制鏈接]
跳轉到指定樓層
樓主
ID:199952 發表于 2017-5-12 15:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
opencv3.1.0移植到7688
修改/home/xl/OpenCV/opencv-3.1.0/platforms/linux目錄下的
arm-gnueabi.toolchain.cmake這個文件,為了區分其它的配置文件我改名為arm-gnueabi_7688.toolchain.cmake,
修改后如下:
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
為方便管理創建opencv_7688目錄,在它下面再創建兩個目錄
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
進入7688_build_dir 目錄執行下面這條命令
$ cmake -D CMAKE_BUILD_TYPE=Release-D CMAKE_INSTALL_PREFIX=../7688_install_dir/ -D SOFTFP=ON -D ENABLE_NEON=ON -DCMAKE_TOOLCHAIN_FILE=../../arm-gnueabi_7688.toolchain.cmake ../../../../
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg
注意路徑要對應,最后面是源碼目錄
正常結束如下:
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg
之后在當前目錄下多了許多文件如下:
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg
前面只是配置還不真正編譯,執行make開始編譯
移植opencv3.1.0到gk8602
修改/home/xl/OpenCV/opencv-3.1.0/platforms/linux目錄下的
arm-gnueabi.toolchain.cmake這個文件,修改如下
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image012.jpg
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image014.jpg
然后在當前目錄下創建兩個文件夾,gk8602_build_dir,gk8602_install_dir,
進入gk8602_build_dir目錄執行如下一條命令
cmake -DCMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=../ gk8602_install_dir / -DSOFTFP=ON -D ENABLE_NEON=ON -DCMAKE_TOOLCHAIN_FILE=../arm-gnueabi.toolchain.cmake ../../../  
之后會在當前目錄下生成許多文件及目錄,如下圖:
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image016.jpg
再執行make命令進行編譯,make install 安裝(會自動安裝到gk8602_install_dir目錄,這里的內容是要放到開發板上去的)
編寫測試程序:
為方便管理,在linux目錄下創建一個gk_test目錄,如下
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image018.jpg
進入gk_test目錄編寫cpp文件
$vim  LoadImage.cpp
#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc,char* argv[]){
    string path="/home/zzz/facedata/lena.jpg";
     Mat image = imread(path, 1 );
     if(image.isContinuous()){
         cout<<"read picture successfully!"<<endl;
     }else{
         cout<<"fail to read picture!"<<endl;
     }
     return 0;
}
再編寫CMakeLists.txt文件如下:
# this is required
set(CMAKE_SYSTEM_NAME Linux)
#注意文件對應的路徑別弄錯了
set(CMAKE_FIND_ROOT_PATH/opt/goke/ct_glibc/4.6.1/usr/ /opt/goke/ct_glibc/4.6.1/usr)
set(ARM_LINUX_SYSROOT/opt/goke/ct_glibc/4.6.1/usr/ CACHE PATH "ARM cross compile systemroot")
# search for programs in the buildhost directories (not necessary)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAMNEVER)
# for libraries and headers inthe target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARYONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDEONLY)
set(TOOLCHAIN_DIR"/opt/goke/ct_glibc/4.6.1/usr/")
set(CMAKE_C_COMPILER"/opt/goke/ct_glibc/4.6.1/usr/bin/arm-goke-linux-gnueabi-gcc")
set(CMAKE_CXX_COMPILER"/opt/goke/ct_glibc/4.6.1/usr/bin/arm-goke-linux-gnueabi-g++")
set(CMAKE_VERBOSE_MAKEFILE ON)
cmake_minimum_required(VERSION2.8)
project( LoadImage )
set(OpenCV_DIR/home/xl/OpenCV/opencv-3.1.0/platforms/linux/gk8602_build_dir/)
include_directories(/home/xl/OpenCV/opencv-3.1.0/platforms/linux/gk8602_install_dir/include)
#set(OpenCV_DIR /home/zzz/software/opencv-2.4.9/release)
#include_directories(/home/zzz/software/opencv-2.4.9/build/include)
find_package( OpenCV REQUIRED )
add_executable( LoadImageLoadImage.cpp )
target_link_libraries(LoadImage ${OpenCV_LIBS} )
再執行cmake. 如下:
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image020.jpg
執行后如下:
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image022.jpg
編譯時出錯如下:
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image024.jpg
于是修改CMakeCache.txt加下下面一個標志
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image026.jpg
加了上面的內容后再make如下提示:
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image028.jpg
修改CMakeLists.txt如下,直接指定庫的路徑
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image030.jpg
再編譯出錯:
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image032.jpg
用ar –t命令查看下庫里面包含的文件,再用ar –x 把庫里的文件取出來,看下是什么格式,如下:
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image034.jpg
發現庫的是x86_64的,而我們要用在開發板上應該是這種格式才行
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image036.jpg
移植opencv3.1.0到hi3516a
參考文章:
一、交叉編譯opencv3.1.0
1、修改cmake文件
在源碼的platforms下已經有對各平臺的交叉編譯支持,我們只需要做一些簡單的修改。
[zzz@localhostplatforms]$ pwd
/home/zzz/software/opencv-3.1.0/platforms
[zzz@localhostplatforms]$ ll
total 28
drwxr-xr-x. 4 zzz zzz 4096 Dec 18 23:02 android
drwxr-xr-x. 3 zzz zzz 4096 Dec 18 23:02 ios
drwxr-xr-x. 4 zzz zzz 4096 Jan 22 17:24 linux
drwxr-xr-x. 2 zzz zzz 4096 Dec 18 23:02 osx
-rw-r--r--. 1 zzz zzz  323 Dec 18 23:02 readme.txt
drwxr-xr-x. 2 zzz zzz 4096 Dec 18 23:02 scripts
drwxr-xr-x. 2 zzz zzz 4096 Dec 18 23:02 winrt
我們的目標是交叉編譯到arm上,那么就進入到linux下:
[zzz@localhost linux]$ pwd
/home/zzz/software/opencv-3.1.0/platforms/linux
[zzz@localhost linux]$ ll
total 20
-rw-r--r--.  1 zzz zzz 4196 Jan22 16:35arm-gnueabi.toolchain.cmake
...
arm-gnueabi.toolchain.cmake指明了交叉編譯的一些路徑等設置,我們根據實際情況對其進行適當修改:
set(CMAKE_SYSTEM_NAMELinux)
set(CMAKE_SYSTEM_VERSION1)
set(CMAKE_SYSTEM_PROCESSORarm-hisiv300-linux-gnueabi)
set(GCC_COMPILER_VERSION"4.6" CACHE STRING "GCCCompiler version")
set(FLOAT_ABI_SUFFIX"")
if (NOT SOFTFP)
    set(FLOAT_ABI_SUFFIX"hf")
endif()
#CROSS COMPILESETTING
set(TOOLCHAIN_DIR"/opt/hisi-linux/x86-arm/arm-hisiv300-linux/")
set(CMAKE_C_COMPILER"/opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/arm-hisiv300-linux-uclibcgnueabi-gcc")
set(CMAKE_CXX_COMPILER"/opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/arm-hisiv300-linux-uclibcgnueabi-g++")
set(CMAKE_FIND_ROOT_PATH/opt/hisi-linux/ /opt/hisi-linux/x86-arm/arm-hisiv300-linux/)
set(ARM_LINUX_SYSROOT/opt/hisi-linux/x86-arm/arm-hisiv300-linux/ CACHE PATH "ARM cross compile system root")
MESSAGE(STATUS "Thisis cross compile dir --->"$(CMAKE_C_COMPILER))
#find_program(CMAKE_C_COMPILER NAMESarm-linux-gnueabi${FLOAT_ABI_SUFFIX}-gcc-${GCC_COMPILER_VERSION})
#find_program(CMAKE_CXX_COMPILER NAMESarm-linux-gnueabi${FLOAT_ABI_SUFFIX}-g++-${GCC_COMPILER_VERSION})
#set(ARM_LINUX_SYSROOT /usr/arm-linux-gnueabi${FLOAT_ABI_SUFFIX}CACHE PATH "ARM cross compilation systemroot")
#set(CMAKE_CXX_FLAGS          ""                    CACHESTRING "c++ flags")
#set(CMAKE_C_FLAGS            ""                    CACHESTRING "c flags")
#set(CMAKE_SHARED_LINKER_FLAGS ""                    CACHE STRING "shared linker flags")
#set(CMAKE_MODULE_LINKER_FLAGS ""                    CACHE STRING "module linker flags")
#set(CMAKE_EXE_LINKER_FLAGS   "-Wl,-z,nocopyreloc"  CACHE STRING "executable linker flags")
set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS} -mthumb-fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi")
set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS}-mthumb -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi")
set(CMAKE_SHARED_LINKER_FLAGS"-Wl,--fix-cortex-a8-Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now${CMAKE_SHARED_LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS"-Wl,--fix-cortex-a8-Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now${CMAKE_MODULE_LINKER_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS    "-Wl,--fix-cortex-a8-Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now${CMAKE_EXE_LINKER_FLAGS}")
if(USE_NEON)
  message(WARNING "You use obsolete variable USE_NEON to enable NEONinstruction set. Use -DENABLE_NEON=ON instead." )
  set(ENABLE_NEONTRUE)
elseif(USE_VFPV3)
  message(WARNING "You use obsolete variable USE_VFPV3 to enable VFPV3instruction set. Use -DENABLE_VFPV3=ON instead." )
  set(ENABLE_VFPV3TRUE)
endif()
#set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH}${ARM_LINUX_SYSROOT})
if(EXISTS${CUDA_TOOLKIT_ROOT_DIR})
    set(CMAKE_FIND_ROOT_PATH${CMAKE_FIND_ROOT_PATH} ${CUDA_TOOLKIT_ROOT_DIR})
endif()
set(CMAKE_SKIP_RPATH TRUE CACHE BOOL "Ifset, runtime paths are not added when using shared libraries." )
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDEONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARYONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAMONLY)
# macro to find programs on the host OS
macro( find_host_program )
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER )
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER )
if( CMAKE_HOST_WIN32 )
  SET( WIN32 1 )
  SET( UNIX )
elseif(CMAKE_HOST_APPLE )
  SET( APPLE 1 )
  SET( UNIX )
endif()
find_program( ${ARGN})
SET( WIN32 )
SET( APPLE )
SET( UNIX 1 )
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
endmacro()
# macro to find packages on the host OS
macro( find_host_package )
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER )
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER )
if( CMAKE_HOST_WIN32 )
  SET( WIN32 1 )
  SET( UNIX )
elseif(CMAKE_HOST_APPLE )
  SET( APPLE 1 )
  SET( UNIX )
endif()
find_package( ${ARGN})
SET( WIN32 )
SET( APPLE )
SET( UNIX 1 )
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
endmacro()
2、交叉編譯
設置好了以后,開始進行交叉編譯:
建立好執行cmake的路徑:build_softfp,建立好編譯后的安裝路徑:install_dir
[zzz@localhost linux]$ ll
total 20
-rw-r--r--.  1 zzz zzz4196 Jan 22 16:35 arm-gnueabi.toolchain.cmake
drwxrwxr-x. 15 zzz zzz4096 Jan 22 16:38 build_softfp
drwxrwxr-x.  6 zzz zzz4096 Jan 22 15:51 install_dir
執行:
[zzz@localhost build_softfp]$ pwd
/home/zzz/software/opencv-3.1.0/platforms/linux/build_softfp
[zzz@localhost build_softfp]$ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../install_dir/ -D SOFTFP=ON -DENABLE_NEON=ON -DCMAKE_TOOLCHAIN_FILE=../arm-gnueabi.toolchain.cmake ../../../
等待10幾分鐘。
之后還要執行make ,makeinstall,完成,再執行下面的測試
二、編寫測試程序
1、程序內容
簡單測試對圖片的加載:
#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc,char*argv[]){
   string path="/home/zzz/facedata/lena.jpg";
    Mat image = imread( path, 1 );
    if(image.isContinuous()){
         cout<<"read picture successfully!"<<endl;
    }else{
         cout<<"fail to read picture!"<<endl;
    }
    return 0;
}
2、編譯
CMakeLists.txt:
# this is required
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_FIND_ROOT_PATH /opt/hisi-linux/ /opt/hisi-linux/x86-arm/arm-hisiv300-linux/)
set(ARM_LINUX_SYSROOT/opt/hisi-linux/x86-arm/arm-hisiv300-linux/ CACHE PATH "ARM cross compile system root")
# search for programs in the build host directories (notnecessary)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(TOOLCHAIN_DIR "/opt/hisi-linux/x86-arm/arm-hisiv300-linux/")
set(CMAKE_C_COMPILER "/opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/arm-hisiv300-linux-uclibcgnueabi-gcc")
set(CMAKE_CXX_COMPILER "/opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/arm-hisiv300-linux-uclibcgnueabi-g++")
set(CMAKE_VERBOSE_MAKEFILE ON)
cmake_minimum_required(VERSION 2.8)
project( LoadImage )
set(OpenCV_DIR /home/zzz/software/opencv-3.1.0/platforms/linux/build_softfp/)
include_directories(/home/zzz/software/opencv-3.1.0/platforms/linux/install_dir/include)
#set(OpenCV_DIR /home/zzz/software/opencv-2.4.9/release)
#include_directories(/home/zzz/software/opencv-2.4.9/build/include)
find_package( OpenCV REQUIRED )
add_executable( LoadImage LoadImage.cpp )
target_link_libraries( LoadImage ${OpenCV_LIBS} )
可以把上半部分的內容抽取出來,作為交叉編譯的指示文件:
# this is required
set(CMAKE_SYSTEM_NAMELinux)
set(CMAKE_FIND_ROOT_PATH/opt/hisi-linux/ /opt/hisi-linux/x86-arm/arm-hisiv300-linux/)
set(ARM_LINUX_SYSROOT/opt/hisi-linux/x86-arm/arm-hisiv300-linux/ CACHE PATH "ARM cross compile system root")
# search for programs in the build host directories (not necessary)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAMNEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARYONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDEONLY)
set(TOOLCHAIN_DIR"/opt/hisi-linux/x86-arm/arm-hisiv300-linux/")
set(CMAKE_C_COMPILER"/opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/arm-hisiv300-linux-uclibcgnueabi-gcc")
set(CMAKE_CXX_COMPILER"/opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/arm-hisiv300-linux-uclibcgnueabi-g++")
set(CMAKE_VERBOSE_MAKEFILEON)
執行如下:
[zzz@localhost basictest]$ cmake .
-- The C compiler identification is GNU 4.8.3
-- The CXX compiler identification is GNU 4.8.3
-- Check for working C compiler: /opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/arm-hisiv300-linux-uclibcgnueabi-gcc
-- Check for working C compiler: /opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/arm-hisiv300-linux-uclibcgnueabi-gcc-- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/arm-hisiv300-linux-uclibcgnueabi-g++
-- Check for working CXX compiler: /opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/arm-hisiv300-linux-uclibcgnueabi-g++-- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to:/home/zzz/workspace/arm-opencv3.1.0/src/basictest
[zzz@localhost basictest]$ make
Scanning dependencies of targetLoadImage
[100%] Building CXX objectCMakeFiles/LoadImage.dir/LoadImage.cpp.o
Linking CXX executable LoadImage
[100%] Built target LoadImage
[zzz@localhost basictest]$
三、在板上運行
需要設置好LD_LIBRARY_PATH,使其也指向一開始生成的opencv的庫文件路徑,或者直接將這些庫拷貝到LD_LIBRARY_PATH指定的當前路徑中。
四、問題
一開始沒有設定好cmake的交叉編譯設置,導致在編譯測試程序的時候,使用的是系統的c++編譯器在編譯鏈接,結果提示無法讀取opencv的so的符號等。所以對cmake的設置要在實踐中慢慢掌握全面一些。
后記(2016-1-28):
由于使用的板子有浮點運算單元以及neon,但是上面的編譯腳本沒有使用相關的參數,包括編譯opencv的庫以及編譯自己的執行程序時都沒有用上。因此,編譯出來的程序沒有用上硬件浮點單元的特性。需要進行修改:
1、修改opencv的交叉編譯腳本
主要是設置:
27
28 set(CMAKE_CXX_FLAGS           "-mthumb -mcpu=cortex-a7 -mfloat-abi=softfp-mfpu=neon-vfpv4 -mno-unaligned-access -fno-aggressi    ve-loop-optimizations"    CACHE STRING "c++ flags")
29 set(CMAKE_C_FLAGS             "${CMAKE_CXX_FLAGS}"                    CACHE STRING "c flags")
30 set(CMAKE_SHARED_LINKER_FLAGS"${CMAKE_CXX_FLAGS}"                    CACHE STRING "shared linkerflags")
31 set(CMAKE_MODULE_LINKER_FLAGS"${CMAKE_CXX_FLAGS}"                    CACHE STRING "module linkerflags")
32 set(CMAKE_EXE_LINKER_FLAGS    "${CMAKE_CXX_FLAGS}-Wl,-z,nocopyreloc"  CACHE STRING "executable linker flags")
33
34 #set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS} -mthumb -fdata-sections-Wa,--noexecstack -fsigned-char -Wno-psabi")
35 #set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS}-mthumb -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi")
36
37 #set(CMAKE_SHARED_LINKER_FLAGS"-Wl,--fix-cortex-a8-Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-    z,now ${CMAKE_SHARED_LINKER_FLAGS}")
38 #set(CMAKE_MODULE_LINKER_FLAGS"-Wl,--fix-cortex-a8-Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-    z,now ${CMAKE_MODULE_LINKER_FLAGS}")
39 #set(CMAKE_EXE_LINKER_FLAGS    "-Wl,--fix-cortex-a8-Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-    z,now ${CMAKE_EXE_LINKER_FLAGS}")
40
我這里只需要生成so,是否只需要設置CMAKE_SHARED_LINKER_FLAGS這個就可以了?
2、編譯出來的so的情況:
[zzz@localhost build_softfp]$ cmake-D CMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../install_dir/ -D SOFTFP=ON-DENABLE_NEON=ON -DCMAKE_TOOLCHAIN_FILE=../arm-gnueabi.toolchain.cmake ../../../
[zzz@localhost build_softfp]$ readelf-a lib/libopencv_imgproc.so.2.4.9
...
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "Cortex-A7"
Tag_CPU_arch: v7
Tag_CPU_arch_profile: Application
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-2
Tag_FP_arch: VFPv4
Tag_Advanced_SIMD_arch: NEONv1 with Fused-MAC
Tag_ABI_PCS_wchar_t: 4
Tag_ABI_FP_denormal: Needed
Tag_ABI_FP_exceptions: Needed
Tag_ABI_FP_number_model: IEEE 754
Tag_ABI_align_needed: 8-byte
Tag_ABI_enum_size: int
Tag_ABI_HardFP_use: SP and DP
Tag_CPU_unaligned_access: v6
Tag_MPextension_use: Allowed
Tag_DIV_use: Allowed in v7-A with integer division extension
Tag_Virtualization_use: TrustZone andVirtualization Extensions
[zzz@localhost build_softfp]$
·         

我加了一個-DENABLE_NEON=ON,不加也可以。
3、修改執行程序的腳本
在toolchainfile里增加:
set(CMAKE_CXX_FLAGS          "-mthumb -mcpu=cortex-a7-mfloat-abi=softfp -mfpu=neon-vfpv4 -mno-unaligned-access-fno-aggressive-loop-optimizations"    CACHE STRING "c++ flags")
set(CMAKE_C_FLAGS            "${CMAKE_CXX_FLAGS}"                    CACHE STRING "c flags")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_FLAGS}"                    CACHE STRING "shared linkerflags")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_CXX_FLAGS}"                    CACHE STRING "module linkerflags")
set(CMAKE_EXE_LINKER_FLAGS   "${CMAKE_CXX_FLAGS}-Wl,-z,nocopyreloc"  CACHE STRING "executable linker flags")
經過測試,其實不設置CMAEK_CXX_FLAGS,CMAKE_C_FLAGS及其他,只設置CMAKE_EXE_LINKER_FLAGS,都能達到目標。
產生的exe的情況:
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "Cortex-A7"
Tag_CPU_arch: v7
Tag_CPU_arch_profile: Application
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-2
Tag_FP_arch: VFPv4
Tag_Advanced_SIMD_arch: NEONv1 with Fused-MAC
Tag_ABI_PCS_wchar_t: 4
Tag_ABI_FP_denormal: Needed
Tag_ABI_FP_exceptions: Needed
Tag_ABI_FP_number_model: IEEE 754
Tag_ABI_align_needed: 8-byte
Tag_ABI_enum_size: int
Tag_ABI_HardFP_use: SP and DP
Tag_CPU_unaligned_access: v6
Tag_MPextension_use: Allowed
Tag_DIV_use: Allowed in v7-A with integer division extension
Tag_Virtualization_use: TrustZone andVirtualization Extensions

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表