1. 程式人生 > >arm平臺Opencv靜態和動態庫的編譯

arm平臺Opencv靜態和動態庫的編譯

opencv 2.4.12移植到arm詳細教程
opencv2.4.12
ubuntu12.04
GCC 4.3.2
1.首先下載編譯器,解壓,設定環境變數,完成後,在終端輸入arm後按Tab鍵,若出現arm的相關的內容,則表示配置正確;
參考:http://blog.csdn.net/luotuo44/article/details/8958990
2.下載cmake,
sudo apt-get install cmake-gui
3.完成以上兩步後,現在來進行編譯。網上的教程說的很詳細了,這裡只提幾點問題:
[email protected]:~/ cmake-gui // 啟動cmake
在cmake介面中進行配置
第一步:這裡寫圖片描述

第二步:這裡寫圖片描述

第三步:這裡寫圖片描述

第四步:這裡寫圖片描述

第五步:這裡寫圖片描述

4.按照上述配置完成後,進入下圖劃紅線的目錄(進入自己配置的目錄)

[email protected]:~/ cd /home/onion31s/A31s_Source_lib/opencv_build
[email protected]:~/ make
鑑於網上的參考教程,大多數人這裡會報錯,這裡將錯誤總結如下:
(1)報錯:
Linking CXX executable ../../bin/opencv_test_calib3d
../../lib/libopencv_core.so: undefined reference to pthread_key_create'
../../lib/libopencv_core.so: undefined reference to

pthread_getspecific’
………………..
collect2: ld returned 1 exit status
make[2]: * [bin/opencv_test_calib3d] Error 1
make[1]: * [modules/calib3d/CMakeFiles/opencv_test_calib3d.dir/all] Error 2
make: * [all] Error 2

或者
報錯:undefined reference to “dlopen”
undefined reference to “dlysm”
解決方案:修改這裡寫圖片描述

目錄下的CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原來為空,保險起見,加上-lpthread -lrt -ldl,如下圖:
這裡寫圖片描述
(2)報錯:……xxx.cpp internal compiler error:in vect_transform_stmt ,at tree-vect-stmts.c…..
解決方案:這是編譯器的Bug建議換個低版本的編譯器重新操作;
(3)報錯:“……could not read symbols:bad value”
解決方案:進入 cd /home/onion31s/A31s_Source_lib/opencv_build/3rdparty/zlib/CMakeFiles/Zlib.dir/flags.make
將C_FLAGS= -w -Wall 替換成 C_FLAGS=-03 -fPIC -w -Wall
5.報錯按照上述方法解決,再make後,執行sudo make install ,此時編譯好的庫就按照在你指定的目錄下了.

6.進入上述的安裝庫,若沒有取消BUILD_SHARED_LI選項,則生產的是.so字尾的庫檔案,將這些庫檔案拷貝到板子的/lib目錄下。
7.在Ubuntu上編譯的時候,編譯指令如下:
這裡寫圖片描述
其中的路徑對應到你安裝庫檔案的路徑。
8.如果你是靜態編譯,將上述命令中的.so庫檔案替換成.a庫檔案,再在指令最後新增 -static,這樣你無須拷貝任何庫檔案到板子上,直接編譯後拷貝編譯後的檔案在板子上直接即可執行。
現在你的板子上可以跑opencv寫的程式了。

qq:3140606578

相關推薦

arm平臺Opencv靜態動態編譯

opencv 2.4.12移植到arm詳細教程 opencv2.4.12 ubuntu12.04 GCC 4.3.2 1.首先下載編譯器,解壓,設定環境變數,完成後,在終端輸入arm後按Tab鍵,若出現arm的相關的內容,則表示配置正確; 參考:htt

android 靜態動態編譯

android 庫的編譯依賴於nkd-build,使用之前請先安裝NDK。 編譯依賴 Android.mk 和 Application.mk 兩個檔案。 Android.mk(同時編譯靜態庫和動態庫): LOCAL_PATH := $(call my-di

NCNN移植ARM爬坑日誌六-動態編譯

為了移植更加方便,將ncnn封裝程.so動態連結庫 1、將ncnn-master/build/install/include中所有.h檔案以及和ncnn-master/build/install中的libncnn.a檔案複製到需要編譯的資料夾內。 2、將自己寫好的介面檔案

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

ffmpeg的ubuntu的編譯過程(編譯靜態動態

ffmpeg第一步源碼下載通過git下載git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg或者直接下載wget http://ffmpeg.org/releases/ffmpeg-3.3.tar.bz2如果是下載的ffmpeg-3.3.tar.bz2 需要進

linux+vs2013編譯靜態動態

cal 控制 文件 urn 運行時 names c++ spec using Linux下創建與使用靜態庫 Linux靜態庫命名規則 Linux靜態庫命名規範,必須是"lib[your_library_name].a":lib為前綴,中間是靜態庫名,擴展名為.a。 創建靜態

靜態動態的區別win平臺linux平臺代碼實現

linux動態庫 聲明 CP 控制臺程序 後綴 差異 創建 SM mes 什麽是庫   庫是寫好的,現有的,成熟的,可以復用的代碼。現實中每個程序都要依賴很多基礎的底層庫,不可能每個人的代碼都從零開始,因此庫的存在意義非同尋常。   本質上來說,庫是一種可

用Makefile編譯靜態檔案動態檔案

    最近要用到的簽名演算法只給了一堆原始碼沒有給庫檔案,api都不好呼叫,於是嘗試著用Makefile給一堆c原始碼編譯靜態連結庫檔案和動態連結庫檔案。 Makefile檔案編輯的相關資料連結: https://www.cnblogs.com/yya

CMakelist編譯靜態動態

從程式碼模組化的角度,往往需要將一個系統工程拆分成很多小的模組,編譯成庫函式也是很好的方法。 編譯庫函式的時候,可以選擇編譯成靜態庫或者動態庫。靜態庫對應.a檔案,動態庫對應.so檔案。 還是以氣泡排序為例加以說明。 編寫StaticBubble.h標頭檔

Linux靜態動態的命名規則編譯連結

1、Linux靜態庫和動態庫的命名規則 靜態函式庫 靜態庫的名字一般是libxxx.a,利用靜態庫編譯生成的檔案比較大,因為整個靜態庫所有的資料都會被整合進目的碼中。 a)優點 編譯後,可執行檔案不需要外部支援; b)缺點 生成的可執行程式大;靜態庫改變了,就

CMake 編譯靜態動態

本帖子適用於初學者,StepByStep的入門CMake,CMake也是一門程式語言,只不過是針對編譯和連結這種程式構建的過程的語言,學習基本語法就可以初步入門,後面需要什麼複雜的功能,進階掌握需要自己去查詢官方文件,後續會給出查閱的一些方式

linux 下編譯生成靜態動態

我們此處為了說明靜態庫和動態庫的編譯,會使用示例程式碼。建立  test.h, hello.cpp 和 world.cpp, 在兩個原始檔中分別實現兩個函式( 此處都是示例程式碼,檔案命名不規範,理解意思即可 )。test.h (靜態庫標頭檔案)#ifndef _TEST_

g++ 編譯連結C++程式碼, 生成與使用靜態動態

例如我有A.cpp、A.h、main.cpp 三個檔案 編譯連結C++程式碼: 第一步:g++ -c A.cpp main.cpp 這樣就可以編譯A.cpp和main.cpp的程式碼生成A.o和main.o檔案【因為A.cpp包含了A.h的標頭檔案,所以一般編譯時

[C/C++] VS2017編譯libcurl靜態動態

開啟 VS2013 x86 本機命令工具提示,進入libcurl目錄winbuild cd D:\MyWork\cpp\third\curl-7.61.1\winbuild 執行命令 // r

關於Linux靜態動態的分析

所在 mis color 先後 main 技術 哪些 共享 協議 關於Linux靜態庫和動態庫的分析 關於Linux靜態庫和動態庫的分析 1.什麽是庫 在windows平臺和linux平臺下都大量存在著庫。 本質上來說庫是一種可運行代碼的二進制形式。能夠被操作系

靜態動態的使用

window != 函數調用 img clas 處理 dllexport void 再看 1.靜態庫使用比較簡單,就兩步 @1包含靜態庫頭文件#include "文件名" @2預處理加載靜態庫 #pragma comment(lib,"庫文件名") 2.再看動態庫 @1首先

Windows靜態動態的創建使用(VS2005)

spec 占用內存 庫文件 工程 存在 中間 開發程序 文件的 系統 偶們在實際的編程開發中,經常會遇到運行時無法找到某個DLL文件或者鏈接時無法找到某個LIB文件。然後,我們就開始亂GOOGLE一下,然後將VS2005的設置改變一下,或許就Ok了,我們將別人開發的DLL或

linux下的靜態動態

列表 可執行文件 運行時 打包 文件的 ade 命令 div library 一、linux下的靜態庫 靜態庫中的被調用的函數的代碼會在編譯時一起被復制到可執行文件中去的!!可執行文件在運行不需要靜態庫的存在! 二、linux下動態庫的構建和使用 1、動態庫的構建

linux 靜態動態(共享)的制作與使用(註意覆蓋問題)

png 環境變量 src bfile idt 鏈接器 問題 靜態 插入 一、linux操作系統支持的函數庫分支   靜態庫:libxxx.a,在編譯時就將庫編譯進可執行程序     優點:程序的運行環境中不需要外部的函數庫     缺點:可執行程序大   動態庫:又