Linux源碼編譯安裝OpenCV4(Ubuntu19)

linux安裝官網參考
從源碼編譯jar官網參考

1.1 安裝lib依賴

必須要安裝的依賴,通過命令安裝:

[compiler] sudo apt-get install build-essential
[required] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

如果需要其他的功能,可選安裝:

[optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

1.2 安裝ant依賴

注:此前因沒安裝ant,導致構建靜態jni庫時總是不生成,make也不報錯,必須安裝!
Apache ant官方下載最新版 https://ant.apache.org/bindownload.cgi

2.1 安裝OpenCV(這里使用4.1.1)

下載Opencv安裝包,OpenCV官網下載 只有Windows和Android等
若想構建Centos版只能從源碼構建 Github源碼下載

解壓:

unzip opencv-4.1.1.zip

2.2 在解壓的主目錄里新建build空目錄用來存放編譯文件(因OpenCV4.x要求不允許生成在有源碼的目錄):

cd opencv-4.1.1
mkdir build
cd build

【注: cmake/make編譯的路徑不要包含中文,否則可能導致一些奇葩問題,親身踩坑!】
報錯:

...
[ 43%] Linking CXX static library ../lib/liblibprotobuf.a
[ 43%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/src/matrix_c.cpp.o
[ 43%] Building  target libprotobuf xxx   CMakefile (:163  all) 

2.3.1 然后在新建的這個文件里運行cmake(為了減少升級cmake2到cmake3源碼安裝的折騰,直接可在線安裝 yum install -y cmake3):

cmake3 -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTS=OFF -DBUILD_opencv_java=ON -DCMAKE_INSTALL_PREFIX=/usr/local ..

2.3.2 更多可選參數,如:

-DCMAKE_BUILD_TYPE=RELEASE
-DWITH_OPENCL=OFF
-DWITH_CUDA=OFF
-DWITH_OPENCL=ON
-DWITH_OPENGL=OFF
-DWITH_OPENMP=OFF
-DWITH_OPENNNI=OFF
-DWITH_OPENNNI2=OFF
-DWITH_OPENVX=OFF
-DWITH_VULKAN=OFF
-DBUILD_CUDA_STUBS=OFF
-DBUILD_DOCS=OFF
-DBUILD_EXAMPLES=OFF
-DBUILD_IPP_IW=ON
-DBUILD_ITT=ON
-DBUILD_JASPER=ON
-DBUILD_JAVA=OFF
-DBUILD_JPEG=ON
-DBUILD_OPENEXR=ON
-DBUILD_PACKAGE=ON
-DBUILD_PERF_TESTS=OFF
-DBUILD_PNG=ON
-DBUILD_PROTOBUF=ON
-DBUILD_SHARED_LIBS=ON
-DBUILD_TBB=OFF
-DBUILD_TESTS=ON
-DBUILD_TIFF=ON
-DBUILD_USE_SYMLINKS=OFF
-DBUILD_WEBP=ON
-DBUILD_WITH_DEBUG_INFO=OFF
-DBUILD_WITH_DYNAMIC_IPP=OFF
-DBUILD_ZLIB=ON
-DBUILD_opencv_apps=OFF
-DBUILD_opencv_calib3d=OFF
-DBUILD_opencv_core=ON
-DBUILD_opencv_dnn=ON
-DBUILD_opencv_features2d=OFF
-DBUILD_opencv_flann=OFF
-DBUILD_opencv_gapi=ON
-DBUILD_opencv_highgui=OFF
-DBUILD_opencv_imgcodecs=ON
-DBUILD_opencv_imgproc=ON
-DBUILD_opencv_java_bindings_generator=OFF
-DBUILD_opencv_js=OFF
-DBUILD_opencv_ml=OFF
-DBUILD_opencv_objdetect=OFF
-DBUILD_opencv_photo=OFF
-DBUILD_opencv_python2=OFF
-DBUILD_opencv_python3=OFF
-DBUILD_opencv_python_bindings_generator=OFF
-DBUILD_opencv_stitching=OFF
-DBUILD_opencv_ts=OFF
-DBUILD_opencv_video=OFF
-DBUILD_opencv_videoio=OFF
-DBUILD_opencv_world=OFF
-DCMAKE_INSTALL_PREFIX=./install

如上參數表示,只關注core、dnn、imgcodecs、imgproc、gapi模塊。
若需要編譯擴展模塊,則還需要加入:

-DOPENCV_EXTRA_MODULES_PATH=/path/opencv_contrib/modules

如果是嵌入式設備,還需要加入相應的編譯工具鏈和其他一些配置,如下所示:

-DCMAKE_C_COMPILER=/path/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-gcc -DCMAKE_CXX_COMPILER=/path/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-g++ -DCMAKE_CXX_FLAGS=-fPIC -DCMAKE_C_FLAGS=-fPIC -DCMAKE_EXE_LINKER_FLAGS=-lpthread -lrt -ldl

2.4 OpenCV4默認不生成.pc文件,OPENCV_GENERATE_PKGCONFIG=ON才會生成。
之后就是編譯和安裝了,我的電腦是四核八線程,可以運行make,若不想編譯時時間太長影響工作,四核的PC可用 make -j7。

make -j7
sudo make install

FQA:

問題1:使用clion或者CMake命令時報錯,錯誤消息:CMake Error at CMakeLists.txt:11 (message):FATAL: In-source builds are not allowed.You should create a separate directory for build files.

解決方案:
進到opencv主目錄

rm CMakeCache.txt
mkdir build
cd build
cmake ..
make

問題2:編譯成功后,如將 libopencv_xxx.jar和libopencv_xxx.so拷貝只Java工程運行,報錯消息:

libopencv_core.so.xxx : cannot open shared object file libopencv_dnn.so.xxx: no such file or directory
解決方案:
檢查編譯參數是否使用靜態編譯,因為動態編譯生成的so文件會使用編譯的時候的系統絕對路徑,要想在java工程動態引用,必須使用靜態編譯,顯示指定參數:-DBUILD_SHARED_LIBS=OFF(默認是ON)

已在應用于本人一個開源項目:
參考1:https://github.com/wl4g/super-devops-tool-opencv-native
參考2:https://github.com/wl4g/super-devops/tree/master/super-devops-tool/super-devops-tool-opencv

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374