1. 程式人生 > >ubuntu中opencv靜態編譯

ubuntu中opencv靜態編譯

ubuntu12.04中opencv靜態編譯

1.12.04中沒有了新立德,忍受不了軟體中心的慢,所以安裝了新立德

apt-get install synaptic

2.安裝gcc等C/C++程式設計相關工具

sudo apt-get install build-essential

3.安裝gtk+(opencv的介面顯示就靠它了)

安裝GTK環境只要安裝一個libgtk2.0-dev就可以了,而安裝gnome開發環境的話,需要裝gnome-core-devel,它包含GTK開發包。

sudo apt-get install gnome-core-devel(有點慢,需要下載,看網速)

pkg-config --modversion gtk+    (檢視1.2.x版本)

pkg-config --modversion gtk+-2.0  (檢視 2.x 版本)

pkg-config --version (檢視pkg-config的版本)

pkg-config --list-all |grep gtk (檢視是否安裝了gtk) 

4.使用synaptic安裝cmake-qt版本

有介面的cmake配置opencv編譯選項方便些

5.安裝wxWidgets(codeblocks IDE需要到)V2.8(詳情見

由於codeblocks是用wxWidgets開發的,所以wxWidgets需要先安裝.以最小化體積為編譯目的,shared,unicode版本,庫檔案編譯為一個檔案,不支援2.8,去掉debug資訊,最終配置命令如下(./configure --help可檢視引數資訊):

./configure --enable-unicode --enable-shared--enable-monolithic --disable-compat28 --disable-debug_flag 

make(需要一定時間)

make install

ldconfig(需要把/usr/local/lib加到/etc/ld.so.conf最後一行中,再執行ldconfig)

編譯後的檔案放在/usr/local/bin和/usr/local/lib目錄中,可通過—prefix改變路徑.

由於Codeblocks暫時只支援2.8,所以解除安裝2.9的:make uninstall.重新安裝2.8

./configure --enable-unicode --enable-shared--enable-monolithic --disable-compat26 --disable-debug_flag 

make(需要一定時間)

make install

6.安裝CodeBlocks(Ver10.05)

 Codeblocks最新版本10.05(截至2012-5-12)只能使用wxWidgets2.8,不相容2.9.使用2.9會出現以下錯誤:editarrayorderdlg.h:20:error: default argument for parameter of type 'const wxArrayString&' hastype 'long int'. 且wxWidgets需編譯成單一檔案.原始碼下的BUILD檔案裡面有編譯說明.直接順序執行以下三條命令就行.

./configure --with-contrib-plugins=all

make

make install

     安裝完成後,開啟它只發現它在工作列中閃一會兒就消失了,出不了介面.在終端得執行提示:codeblocks:error while loading shared libraries: libcodeblocks.so.0: cannot open sharedobject file: No such file or directory

解決辦法為:In that case make sure the library path where the Code::Blocks librarieswhere installed into is "known" to the system. For example: On Ubuntuusing a default build process on a clean system will install the Code::Blocksexecutables to /use/local/bin and the libraries to /usr/local/lib. The latteris usually not known to a "clean" Ubuntu system. To add it to thesearch path for libraries do the following (as root / using sudo respectively):Add the following line to the file /etc/ld.so.conf:

/usr/local/lib

...and run:

ldconfig

That's it - Code::Blocks should now work just fine asall libraries are being found.

      wxSmith用不了,開啟CB提示:

/usr/local/lib/codeblocks/plugins/libwxSmithAui.so:not loaded (missing symbols?)

/usr/local/lib/codeblocks/plugins/libwxsmithcontribitems.so:not loaded (missing symbols?)

/usr/local/lib/codeblocks/plugins/libwxsmith.so: notloaded (missing symbols?)

執行 sudo ldconfig就行

7.安裝ffmpeg(Ver0.10.3)

需要先安裝ffmpeg(先安裝yasm),下載原始碼,

./configure --enable-shared(需要動態連結)

make

makeinstall

ldconfig四步就行.

    如果機子以前安裝過ffmpeg,需要先解除安裝乾淨。本人使用synaptic裝過0.8版本,最後使用synaptic解除安裝了,但libav*等庫檔案還存在,所以怎樣編譯ffmpeg都是連結到0.8的那些庫,都會是出錯。

只要libavdevice,filter,format,codec,swresample,swscale,avutil這7個庫中有連結到以下目錄的,就是連結到了舊檔案。

/usr/lib/i386-linux-gnu/,/usr/lib/i386-linux-gnu/i686/cmov/。應該連結到/usr/local/lib目錄裡才是正確的。

解決辦法:

    刪除/usr/lib/i386-linux-gnu/,/usr/lib/i386-linux-gnu/i686/cmov/這兩個目錄裡相應的檔案,然後重新ldconfig,再ldd `which ffmpeg`檢視ffmpeg庫的連結情況,如果都連結到了/usr/local/lib目錄裡的相關庫,則成功。不行則把上面2個目錄裡的相關庫檔案刪除了再編譯連結。

8.安裝opencv(Ver2.4.2)

使用cmake編譯,

取消BUILD_JASPER JPEG PNG TIFF ZLIB(linux的思想是共享,所以使用系統的影象庫,沒有則先安裝)

    BUILD_SHARED_LIBSBUILD_PERF_TESTS BUILD_TESTS(由於靜態庫,沒有指定ffmpeg相關庫檔案,這些Tests會編譯失敗)

編譯並安裝完成後,使用pkg-config檢視標頭檔案與庫檔案資訊

[email protected]:~# pkg-config opencv --cflags   //檢視包含目錄

-I/usr/local/include/opencv -I/usr/local/include

[email protected]:~# pkg-config opencv --libs    //檢視庫連結,可見該格式是錯誤的,沒有-L與-l標識,所以需要自己新增

/usr/local/lib/libopencv_contrib.a/usr/local/lib/libopencv_legacy.a /usr/local/lib/libopencv_ml.a/usr/local/lib/libopencv_stitching.a /usr/local/lib/libopencv_ts.a/usr/local/lib/libopencv_videostab.a /usr/local/lib/libopencv_gpu.a/usr/local/lib/libopencv_nonfree.a /usr/local/lib/libopencv_objdetect.a/usr/local/lib/libopencv_calib3d.a /usr/local/lib/libopencv_photo.a/usr/local/lib/libopencv_video.a /usr/local/lib/libopencv_features2d.a/usr/local/lib/libopencv_highgui.a/usr/local/share/OpenCV/3rdparty/lib/liblibjasper.a/usr/local/share/OpenCV/3rdparty/lib/liblibtiff.a/usr/local/share/OpenCV/3rdparty/lib/liblibpng.a/usr/local/share/OpenCV/3rdparty/lib/liblibjpeg.a/usr/local/lib/libopencv_flann.a /usr/local/lib/libopencv_imgproc.a/usr/local/lib/libopencv_core.a /usr/local/share/OpenCV/3rdparty/lib/libzlib.aswscale avformat avutil z avcodec gstvideo-0.10 gstapp-0.10 xml2 gmodule-2.0gstreamer-0.10 gstbase-0.10 gthread-2.0 glib-2.0 gobject-2.0 fontconfigfreetype pango-1.0 cairo gdk_pixbuf-2.0 pangocairo-1.0 pangoft2-1.0 gio-2.0atk-1.0 gdk-x11-2.0 gtk-x11-2.0 rt pthread m dl stdc++ 

9.測試opencv

標頭檔案位置設定:codeblocks中 專案—Build option-Compiler settings--otheroptions 中加入`pkg-config opencv --cflags`

庫連結引數設定:codeblocks中 專案—Build option-Linker settings--other linkeroptions 中加入`pkg-config opencv --libs`,由前面可知靜態編譯完成後的opencv得到的libs格式不正確,所以需要手動改為正確格式再輸出otherlinker options中(具體引數見下表分析)。






(highgui)





(-static)




-static -lopencv_contrib -lopencv_legacy -lopencv_ml -lopencv_stitching -lopencv_videostab -lopencv_gpu -lopencv_nonfree -lopencv_objdetect -lopencv_calib3d -lopencv_photo -lopencv_video -lopencv_features2d -lopencv_highgui

-llibjasper -llibtiff -llibpng -llibjpeg

-lopencv_flann -lopencv_imgproc -lopencv_core

-lswscale -lavformat -lavcodec -lavutil -lva -lzlib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lglib-2.0 -lgthread-2.0 -lrt -lpthread -lm -ldl -lstdc++

連結不成功

生成
檔案
依賴

連結不成功:
因為gtk中atk,gdk_pixbuff這兩個庫只有動態庫,沒有靜態表,無法進行表述連結。安裝這些庫的靜態庫可解決問題。





(-shared)




-lopencv_contrib -lopencv_legacy -lopencv_ml -lopencv_stitching -lopencv_videostab -lopencv_gpu -lopencv_nonfree -lopencv_objdetect -lopencv_calib3d -lopencv_photo -lopencv_video -lopencv_features2d -lopencv_highgui

-llibjasper -llibtiff -llibpng -llibjpeg

-lopencv_flann -lopencv_imgproc -lopencv_core

-lswscale -lavformat -lavcodec -lavutil -lva -lzlib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lglib-2.0 -lgthread-2.0 -lrt -lpthread -lm -ldl -lstdc++

成功,可執行







  linux-gate.so.1   libva.so.1 libgtk-x11-2.0.so.0 libgdk-x11-2.0.so.0 libgobject-2.0.so.0 libglib-2.0.so.0 librt.so.1 libpthread.so.0 libstdc++.so.6 libm.so.6 libgcc_s.so.1 libc.so.6 libdl.so.2 libpangocairo-1.0.so.0 libX11.so.6 libXfixes.so.3 libatk-1.0.so.0 libcairo.so.2 libgdk_pixbuf-2.0.so.0 libgio-2.0.so.0 libpangoft2-1.0.so.0 libpango-1.0.so.0 libfontconfig.so.1 libXext.so.6 libXrender.so.1 libXinerama.so.1 libXi.so.6 libXrandr.so.2 libXcursor.so.1 libXcomposite.so.1 libXdamage.so.1 ibffi.so.6 libpcre.so.3 /lib/ld-linux.so.2 libfreetype.so.6 libxcb.so.1 libpixman-1.so.0 libpng12.so.0 libxcb-shm.so.0    libxcb-render.so.0 libz.so.1 libgmodule-2.0.so.0 libselinux.so.1     libresolv.so.2 libexpat.so.1 libXau.so.6 libXdmcp.so.6







(highgui)





(-static)




-static -L/usr/local/lib -L/usr/local/share/OpenCV/3rdparty/lib
-lopencv_contrib -lopencv_legacy -lopencv_ml -lopencv_stitching -lopencv_videostab -lopencv_gpu -lopencv_nonfree -lopencv_objdetect -lopencv_calib3d -lopencv_photo -lopencv_video -lopencv_features2d -lopencv_highgui
-llibjasper -llibtiff -llibpng -llibjpeg
-lopencv_flann -lopencv_imgproc -lopencv_core -lzlib
-lswscale -lavutil -lavformat -lavcodec
-lxml2 -lgmodule-2.0 -lgstreamer-0.10 -lgstbase-0.10
-lgthread-2.0 -lglib-2.0 -lgobject-2.0 -lfontconfig -lfreetype -lpango-1.0 -lcairo -lpangocairo-1.0 -lpangoft2-1.0 -lgio-2.0 -lgdk-x11-2.0 -lgtk-x11-2.0
-ldl -lm -lpthread -lrt -lstdc++

成功,可以執行

生成檔案依賴項

目標程式沒有連結動態庫not a dynamic executable,即不依賴於任何檔案,比MS牛





(-shared)




-shared -L/usr/local/lib -L/usr/local/share/OpenCV/3rdparty/lib
-lopencv_contrib -lopencv_legacy -lopencv_ml -lopencv_stitching -lopencv_videostab -lopencv_gpu -lopencv_nonfree -lopencv_objdetect -lopencv_calib3d -lopencv_photo -lopencv_video -lopencv_features2d -lopencv_highgui
-llibjasper -llibtiff -llibpng -llibjpeg
-lopencv_flann -lopencv_imgproc -lopencv_core -lzlib
-lswscale -lavutil -lavformat -lavcodec
-lxml2 -lgmodule-2.0 -lgstreamer-0.10 -lgstbase-0.10
-lgthread-2.0 -lglib-2.0 -lgobject-2.0 -lfontconfig -lfreetype -lpango-1.0 -lcairo -lpangocairo-1.0 -lpangoft2-1.0 -lgio-2.0 -lgdk-x11-2.0 -lgtk-x11-2.0
-ldl -lm -lpthread -lrt -lstdc++

執行不了,提示Illegal instruction (core dumped)

生成
檔案
依賴

 linux-gate.so.1 =>  (0x00f82000)
 libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x00a02000)
 librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0x00ea4000)
 libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0x0030d000)
 libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x008e6000)
 libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00bf2000)
 /lib/ld-linux.so.2 (0x005ec000)
 libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0x003f2000)

出錯處理:

/usr/bin/ld: cannot find -lgstvideo-0.10

/usr/bin/ld: cannot find -lgstapp-0.10

/usr/bin/ld: cannot find -lgdk_pixbuf-2.0

/usr/bin/ld: cannot find -latk-1.0

(使用-static引數就會出現上面的錯誤)把庫連結引數中的-lgstvideo-0.10-lgstapp-0.10 -lgdk_pixbuf-2.0 -latk-1.0四項去掉(每項對應一個錯誤)

相關推薦

ubuntuopencv靜態編譯

ubuntu12.04中opencv靜態編譯 1.12.04中沒有了新立德,忍受不了軟體中心的慢,所以安裝了新立德 apt-get install synaptic 2.安裝gcc等C/C++程式設計相關工具 sudo apt-get install build-essential 3.安裝gtk+(o

解決VS2008MFC靜態編譯出來的檔案太大問題

原始連結 vs2008下:test 1、新建一個預設的MFC對話方塊工程,採用共享MFC的方式,生成檔案:82KBtest 2、新建一個預設的MFC對話方塊工程,採用靜態連結MFC的方式,生成檔案1.66MBvs2005下:test 1、新建一個預設的MFC對話方塊工程,採用共享MFC的方式,

解決一個Ubuntu編譯NEON優化的OpenCV的錯誤

asm pre neon iat tar 查詢 avg mpi 安裝 在Ubuntu 16中編譯開啟NEON優化的Opencv時,遇到libpng編譯是使用匯編代碼的錯誤,完整錯誤見文章末尾。通過查詢發現解決方案是安裝跨平臺編譯器,安裝代碼如下: sudo apt-get

關於ubuntu動態連結庫路徑的設定以及原始碼編譯python可用的opencv

ubuntu中設定動態連結庫的路徑有兩種方式: 在.bashrc中新增export LD_LIBRARY_PATH=lib_path:$LD_LIBRARY_PATH(其中lib_path表示動態連

如何在ubuntu寫一個簡單的C語言程式碼並編譯執行

首先需要安裝一個編譯器 因為筆者也是剛剛開始學習ubuntu所以不知道各個編譯器之間的區別,筆者所用的是gcc就簡單介紹一下gcc的安裝方法吧。 方法一: 開啟控制檯輸入以下程式碼: sudo apt-get build-dep gcc; sudo apt-get bui

[環境配置]Ubuntu 16.04 原始碼編譯安裝OpenCV-3.2.0+OpenCV_contrib-3.2.0及產生的問題

1.OpenCV-3.2.0+OpenCV_contrib-3.2.0編譯安裝過程 1)下載官方要求的依賴包 GCC 4.4.x or later CMake 2.6 or higher Git GTK+2.x or higher, including headers (libgtk2.

基礎學習筆記之opencv(7):ubuntuopencv在Qt的使用

#include "mainwindow.h"#include "ui_mainwindow.h"#include <QtGui/QMainWindow>#include <QFileDialog>#include <opencv2/highgui/highgui.hpp&g

Ubuntu使用cmake連結opencv庫的兩種方法(opencv3 base+module動態庫的名字也在這裡寫好了)

第一種使用 find_package的方法 示例程式碼如下: # 宣告要求的 cmake 最低版本 cmake_minimum_required( VERSION 2.8 ) # 宣告一個 cmake 工程 project( pro ) # 設定編譯

MAC系統下靜態編譯Opencv

有兩種方法,第一種方法比較簡單,但是會用到CMake,而且用MacOSX10.12.SDK以上的系統都編譯不成功;第二種方法是線上下載編譯opencv,需要網路穩定,不然會error,反正我試了三次沒試成功過。 方法一: 連結如下: 或(Method1- How to

為Android平臺編譯支援OpenCL的Opencv靜態

Opencv中封裝了OpenCL,直接下載的Opencv4Android SDK中提供了一些相關的庫,我們可以利用nm命令檢視這些庫是否包含opencl的相關函式。ocl整合在core中,所以我們直接檢視libopencv_core.a這個庫。 nm -D

Ubuntu使用sublime text編譯並執行C/C++程式

sublime text預設僅僅編譯c/c++程式, 如果要執行則要手動打卡終端執行, 效率不堪入目 實現編譯並自動呼叫bash執行程式只需要新建自己的.build檔案就OK 依次: tools->building system->new buil

ubuntu系統下cmake 編譯matlabmex檔案

cmake 編譯工程具有獨特的優勢,特別對於複雜的工程更是如此。利用matlab直接編譯mex檔案時,對於檔案資料多的工程時,需要列舉所有檔案,並且要按照依賴關係排序,這些都是直接採用matalb編譯mex的缺點。 下面通過一個簡單的加法函式例子,說明如何利用cmake編譯

ubuntu 使用MingW交叉編譯winffmpeg靜態

編譯步驟 1 構建MinGW編譯環境 下載MinGw工具(本人使用的mingw-w64-build-3.6.7) 使用步驟 1.chmod +x mingw-w64-build-3.6.7

Ubuntu人臉識別相關庫的安裝(opencv-python,dlib,face_recognition)

opencv_python的安裝 #opencv-python的安裝 pip install opencv-python dlib的安裝 每一步都要如果網速慢可能要耐心等一段時間 sudo apt-get install build-essential cmake sud

在Linux(Ubuntu使用終端編譯並執行.c和.cpp檔案

首先要保證系統中安裝了C語言和C++對應的編譯器:gcc -> C  ,g++ -> C++1、.c檔案的編譯與執行(1).c檔案hello.c程式碼如下:#include<stdio.h> int main() { printf("H

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

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

ubuntueclipse環境下import cv2後opencv函式呼叫失敗問題解決辦法

當前opencv的安裝已經非常方便,特別是python版本。主要是pip已經提供了opencv-python的包,直接可以免編譯實現對opencv的安裝。 如https://pypi.python.org/pypi/opencv-python網頁中提供了多個連結的下載安裝

xcode 使用ffmpeg 編譯靜態

1、在ffmpeg 官網下載最新的ffmpeg 原始碼:如下 git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg 2、編譯ffmpeg 直接 執行

VSC++靜態/動態庫檔案的編譯除錯與使用

基礎知識:不同語言之間可以通過呼叫動態連結庫 (dll)來呼叫別人寫好的函式同一語言可以呼叫別人寫好的靜態(lib)庫靜態連結庫:是通過靜態聯編的,在連結時,link將自己的(.obj)二進位制檔案和別人的lib檔案一起共同生成.exe檔案。 靜態連結庫的缺點是: 1)比較

AndroidOpenCv編譯的時候一些錯誤的總結

  最近因為一個專案需要在Android中用到OpenCv,搞了幾天才編譯成功,遇到了一些問題,先記下來以後可以檢視。 1.無法解析#include <jni.h> 這個錯誤是因為NDK的include路徑沒有加入,project->properties-