1. 程式人生 > >opencv交叉編譯arm環境庫,靜態,動態庫和可執行程式

opencv交叉編譯arm環境庫,靜態,動態庫和可執行程式

在工作中遇到把基於opencv的程式碼移植到板子上執行,在網上查看了很多資料,嘗試了兩種方案,都是可行的

1.把opencv程式碼用ndk的方式編譯成可執行檔案,直接放到板子上執行,這種方式是最便捷的不用考慮板子上其他程式的干擾

附上ndk編譯程式碼,準備好下面兩個檔案後,就可以編譯出一個native的可執行檔案,直接放到機器上執行,就可以得到opencv計算的結果了

android.mk 

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS)
OPENCV_LIB_TYPE:=STATIC
OPENCV_INSTALL_MODULES:=on
OPENCV_CAMERA_MODULES:=off
ifeq ("$(wildcard $(OPENCV_MK_PATH))","")
#try to load OpenCV.mk from default install location
include /home/zoone/OpenCV-android-sdk/sdk/native/jni/OpenCV.mk 
else
include $(OPENCV_MK_PATH)
endif
LOCAL_MODULE    := native
LOCAL_SRC_FILES := native.cpp


LOCAL_LDLIBS +=  -llog -ldl
include $(BUILD_EXECUTABLE)

application.mk

APP_STL:=gnustl_static  
APP_CPPFLAGS:=-frtti -fexceptions  
APP_ABI:=armeabi armeabi-v7a
APP_PLATFORM := android-19

2.把opencv的原始碼交叉編譯arm的so庫檔案

編譯arm平臺的so庫時,最好基於cmake來配置,因為opencv下載下來的原始碼自帶了各個模組的cmake檔案,直接配置cmake來編譯非常方便

配置編譯環境按照下面的三張圖順序進行就可以了

選擇opencv原始碼根目錄


選擇編譯平臺


選擇編譯工具,分別是gcc 和 g++  Operation system任意寫一個好識別的名字,如arm-linux ,因為系統識別不到,後面會報system的錯誤,這個錯誤忽略不管

按上面的配置完成之後,點選Configue,為了方便找到編譯出來opencv的so庫的位置,對CMAKE_INSTALL_PREFIX 設定一下,指向到你想存放so庫 的路徑

完成上訴後,點選Generate,配置編譯檔案,編譯過程中會報很多錯誤,包括pthread,ltr,ldl等 ,發現報這些錯誤後

很簡單,找到你定義的編譯路徑build下面的CMakeCache.txt,修改CMAKE_EXE_LINKER_FLAGS:STRING = -lpthread -lrt ldl

修改了上面配置後,重新點選Generate,OK,靜靜等待編譯通過就可以了

在反覆嘗試上面兩種方式執行opencv程式碼時,還嘗試過編譯靜態庫,編譯靜態很簡單,只要把camke配置上shared_lib勾去掉就可以,但靜態庫編譯出來很麻煩,需要連結其他對應的20多個其他庫,解決起來很頭疼,所以建議不用靜態庫,用動態庫 

相關推薦

opencv交叉編譯arm環境靜態動態執行程式

在工作中遇到把基於opencv的程式碼移植到板子上執行,在網上查看了很多資料,嘗試了兩種方案,都是可行的 1.把opencv程式碼用ndk的方式編譯成可執行檔案,直接放到板子上執行,這種方式是最便捷的不用考慮板子上其他程式的干擾 附上ndk編譯程式碼,準備好下面兩個檔案後,

QtEmbedded-4.8.6-arm 編譯選擇從 動態變化到靜態生成的Makefile連結路徑下如果有動態靜態優先選擇動態編譯應用

問題:QtEmbedded-4.8.6-arm 編譯選擇從 動態庫到靜態庫 時,發現的一個疑惑:,生成的Makefile連結庫路徑下如果有動態庫和靜態庫,優先選擇動態庫編譯應用 具體現象: 我最初是使用動態庫的 QtEmbedded-4.8.6-arm (編譯器選擇時,是 ./co

交叉編譯arm Linux環境下的android-tools-adb

前言     專案使用Rockchip的3399挖掘機demo板,使用官方提供的Debian Linux SDK(官方github原始碼連結:https://github.com/rockchip-linux)進行開發定製。當前需要將Android上的除錯工具adb移

Linux下的ds18b20驅動(執行環境 Fedora9.0 交叉編譯 arm-linux-gcc-4.3.2 核心版本2.6.32)

今天在各位前輩已有成就的基礎上花了兩天時間終於把這個驅動給搞定了,從開始編譯成模組看效果,進行除錯,再到編譯進核心,最後又編譯了一個介面出來,雖說大多數的程式程式碼是用各位前輩的成果,但坐下來自己收穫也不小,現在寫下來,以供以後參考,也和各位愛好者交流一下,呵呵! 一.編譯成

Ubuntu 16.04下Qt交叉編譯開發環境搭建

轉載地址:http://www.linuxidc.com/Linux/2017-03/141552.htm 一、環境及軟體包介紹: (一)系統環境 (二)軟體包  1、arm-Linux-gcc.tar.gz  我提供的包是arm-linux-gcc4.4.3版本,ar

交叉編譯ARM版Qt(qt-everywhere-opensource-src-4.8.4)

交叉編譯ARM版 Qt (qt-everywhere-opensource-src-4.8.4) 因實際專案需求,需將Qt編譯成LINUX-ARM版,以下為整個操作過程,使用Qt編寫的程式已在實際開發板上執行,在此貼出,但願能為需要的朋友提供上幫助。 準備工作: Linux核心版本:           開

Linux下用Makefile製作動態靜態編譯生成執行程式

Makefile 一個工程中的原始檔不計其數,其按型別、功能、模組分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新

交叉編譯環境學習(編譯Android上的執行程式)

        前幾天幫忙師兄發現的Android上的一個驅動程式漏洞,奈何技術不夠耐心不足,沒有找到漏洞的根源。由於程式要由c程式來觸發,而c程式是在pc上的開發的,要在Android裝置上執行,這

perf交叉編譯 arm-hisiv400-linux

檔案改動配置方法基本與,perf使用arm-hisiv200-linux工具鏈類似。 但是由於arm-hisiv400-linux工具鏈編譯時,問題更多。主要記錄交叉編譯終於到的問題,或解決或繞過。 perf 工具需要zlib、binutils、elfutils庫支援

openssl交叉編譯 mips環境

最近需要使用openssl庫,選用了https://www.openssl.org/地址下的OpenSSL 1.0.1p版本 如果只是正常環境下使用openssl,編譯比較簡單,只需要解壓縮openssl 1.0.1p版本 然後進入根目錄按照如下命令: 1、./config

go交叉編譯arm上的程式

Golang 支援交叉編譯,在一個平臺上生成另一個平臺的可執行程式,最近使用了一下,非常好用,這裡備忘一下。 Mac 下編譯 Linux 和 Windows 64位可執行程式 CGO_ENABLED=0 GOOS=linux GOARCH=amd64

ubuntu 交叉編譯arm linux 核心

相關文章 安裝arm-linux-gcc 4.2.3 sudo tar  xvzf arm-linux-gcc-4.3.2.tar.gz  -C / 此時將安裝到/usr/local/arm下面 設定環境變數 gedit ~/.profile 在

使用Rust交叉編譯arm程式

作者: 劉天明 郵箱: [email protected] 部落格連結: http://blog.csdn.net/bellskinling 轉載請註明出處. 接上文, 有了支援arm版本的Rust後, 我們就可以編譯在arm下執行的程式了, 下面, 根我一起來

解析交叉編譯工具環境變數的設定

建立交叉編譯環境是嵌入式開發的一個重要的步驟,安裝交叉編譯環境就是為交叉編譯工具設定環境變數。 下面就是安裝交叉編譯環境的一個例子:首先:安裝工作目錄。把解壓後的交叉編譯工具鏈arm-linux-gcc 3.4.1版本複製到/usr/local/arm/3.4.1/其實:設定環境變數。#gedit /root

嵌入式深度學習之mxnet交叉編譯Arm Linux

參考文件 本文件涉及到的目標硬體為全志H8(8核Cortex-A7,Armv7架構),但是對其他Arm晶片也有一定的借鑑意義,只需要更換交叉編譯鏈即可。 開發環境介紹 主機作業系統:Ubuntu14.04 64位 目標平臺:CQA83t 全志H8

Windows下使用Eclipse交叉編譯ARM

原文:http://www.acmesystems.it/foxg20_eclipse_windows_c 先轉過來,有時間再翻譯。 Developing in C/C++ with Eclipse Indigo on Windows This article ill

靜態鏈接動態鏈接的區別及動態的創建(轉)

相關 賦值 include ret sta 參數解析 span static 很好 一、引言通常情況下,對函數庫的鏈接是放在編譯時期(compile time)完成的。所有相關的對象文件(object file)與牽涉到的函數庫(library)被鏈接合成一個可執行文

靜態動態文件

命令 ops 過去 編輯 shared 加載過程 二進制文件 函數 因此 在windows中靜態庫是以 .lib 為後綴的文件,共享庫是以 .dll 為後綴的文件。在linux中靜態庫是以 .a 為後綴的文件,共享庫是以 .so為後綴的文件。以linux下的靜態庫和動態庫為

Python網絡爬蟲技巧小總結靜態動態網頁輕松爬取數據

開發者工具 cap 簡單 pos 動態網頁 class 查看 這樣的 bsp 很多人學用python,用得最多的還是各類爬蟲腳本:有寫過抓代理本機驗證的腳本,有寫過自動收郵件的腳本,還有寫過簡單的驗證碼識別的腳本,那麽我們今天就來總結下python爬蟲抓站的一些實用技巧。