靜態編譯opencv for java, opencv 2.4.11 to 2.4.13.6

之前使用的opencv版本是2.4.11, 現在一般都是用java8不是java7了。在很多docker環境裏,使用opencv 2.4.11的so文件,總提示一些錯誤。如libpng找不到,這個是因爲現在都是使用libpng2 或者libpng16了。   

我本來想着重新手動編譯一下2.4.11的靜態文件應該比較好解決。但是編譯過程中也是各種問題,如:stdlib.h: No such file or directory 。  解決了這個,又有其它的。。。    

那我們去opencv 官網看一下都有哪些版本,opencv最新的是4.0了。 爲了兼容性還是要找2.4系列的,版本列表。 有個比較新的,2.4.13.6,這個 兼容性應該沒什麼大問題。就拿這個來做靜態編譯算了。 

下載 opencv 2.4.13 . 

解壓

cd opencv-2.4.13.6
#創建編譯目錄,不能在源碼目錄下編譯
mkdir build && cd build
# CMAKE_BUILD_TYPE=RELEASE 是否帶調試信息。CMAKE_BUILD_TYPE的值可以爲Release或者Debug
# CMAKE_INSTALL_PREFIX 提前設置好編譯到的路徑
# DBUILD_SHARED_LIBS 關閉生成動態庫,即生成靜態庫
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -DBUILD_SHARED_LIBS=OFF ..

# 單核就不要加j參數了,GCC編譯的時候默認使用一核,所以多核CPU如果想利用好才加j參數. j8不是java8的意思。。
make -j8
#如果不是root權限要加sudo 
make install 

OpenCV Java開發教程

這裏一定要注意,在cmake的時候,查看上圖紅線標註的地方,如果沒有"java"字,是不會編譯得到java的靜態so庫文件的。一般的原因是沒有安裝ant,或者是JAVA_HOME沒有設置。如果JAVA_HOME設置了不起作用,試試重新安裝一次。

#安裝apache ant 
apt update
sudo apt -y install ant
#安裝軟件包後,可以使用以下命令檢查安裝的版本:
ant -version
#這種方法,安裝很方便快捷,但是安裝的版本是穩定版。最新版本是需要下載源碼手動安裝的

# 重新安裝jdk 可以試試下面的方法
# apt  install default-jdk
# apt install -y openjdk-8-jdk openjdk-8-jre
#查找java位置
which java
#找到後要用ls -l  查看一下,看是不是軟鏈接,然後找到真的jdk目錄。也可以找tool.jar來找目錄
find  / -name tool.jar

#設置環境變量 Linux
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

#使用opencv過程中出現 java.lang.UnsatisfiedLinkError 一般是沒有加載libopencv_java2413.so庫文件的原因

 

查找過程中一些Opencv的文章

opencv入門

在mac系統 上安裝 opencv +java

Introduction to Java Development

Installation in Linux¶

w3school java opencv

相關文章

在Ubuntu/Debian系統上安裝Apache Ant的方法

CMake could not find JNI

not finding jni.h

編譯的一些基本知識

make進行編譯,再運行make install進行安裝了,最後運行make clean刪除臨時文件
make all:產生我們設定的目標,即此範例中的可執行文件。只打make也可以,此時會開始編譯原始碼,然後連結,並且產生可執行文件。
make clean:清除編譯產生的可執行文件及目標文件(object file,*.o)。
make distclean:除了清除可執行文件和目標文件外,把configure所產生的Makefile也清除掉。
make install:將程序安裝至系統中。如果原始碼編譯無誤,且執行結果正確,便可以把程序安裝至系統預設的可執行文件存放路徑。如果用bin_PROGRAMS宏的話,程序會被安裝至/usr/local/bin這個目錄。
make dist:將程序和相關的檔案包裝成一個壓縮文件以供發佈。執行完在目錄下會產生一個以PACKAGE-VERSION.tar.gz爲名稱的文件。 PACKAGE和VERSION這兩個變數是根據configure.in文件中AM_INIT_AUTOMAKE(PACKAGE,VERSION)的定義。

#函數計算 fun 的使用
#使用sbox  在本地docker環境測試 -i是交互的意思   -f是指定函數名
fun install sbox -i -f javademo -e JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

#Could NOT find JNI (missing:  JAVA_AWT_INCLUDE_PATH)   這個是因爲找不到jawt.h的原因。
#Checking the documentation for FindJNI (https://cmake.org/cmake/help/latest/module/FindJNI.html)  重新安裝jdk可以解決。

#camke精簡  使用下面這個就可以的,其它的參數可以不用加
cmake -DBUILD_SHARED_LIBS=OFF ..

#docker  aliyunfc/runtime-java8
# fun local invoke -d 3000 java8
# fun local invoke -d 3000 --config VSCode

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章