1、首先opencv是用C++寫的杖小,要基于gcc和g++睬魂,所以Linux中要有這個(gè)
sudo yum update
sudo yum install gcc gcc-c++
2、將安裝包opencv-4.6.0.zip上傳至【/opt/software/opencv】目錄下
需要的包都在這里了
鏈接:https://pan.baidu.com/s/1CApu9JUcP9oDVR96n6WQGA?pwd=1234
提取碼:1234
3、解壓opencv-4.6.0.zip并進(jìn)入opencv-4.6.0油宜,同時(shí)創(chuàng)建build文件夾
tar -xzvf opencv-4.6.0.tar.gz
cd opencv-4.6.0
mkdir build
cd build
4掂碱、進(jìn)行編譯
cmake -D BUILD_SHARED_LIBS=OFF -D BUILD_TEST=OFF ..
如果不行怜姿,再用下面這個(gè)
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/opt/software/opencv/opencv-4.6.0 …
5、查看CPU核數(shù)并執(zhí)行make命令
cat /proc/cpuinfo | grep "cpu cores" | uniq
make -j8
sudo make install
6疼燥、這個(gè)時(shí)候/opt/software/opencv/opencv-4.6.0/build/lib下沧卢,編譯之后,如果不生成 opencv_java460.so 文件醉者,是因?yàn)閏mke需要java環(huán)境和ant
解決辦法:從上面的網(wǎng)盤直接下載但狭,放入到/usr/lib目錄下即可
7、使用opencv時(shí)撬即,要加載opencv_java460.so文件立磁,代碼中加入下面這段
static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
8、但是剥槐!啟動(dòng)可能會(huì)報(bào)錯(cuò)唱歧,我遇到兩個(gè)問題
第一個(gè):/lib64/libm.so.6: version `GLIBC_2.29' not found
第二個(gè):/lib64/libstdc++.so.6: version `GLIBCXX_3.4.26' not found
輸入命令查詢了一下當(dāng)前版本
rpm -q glibc
ldd --version
strings /lib64/libm.so.6 | grep GLIBC_
查詢GLIBC的版本為GLIBC_2.28
strings /lib64/libstdc++.so.6 | grep GLIBC
查詢GLIBCXX的版本為GLIBCXX_3.4.25
8、解決第一個(gè)問題粒竖,準(zhǔn)備升級(jí)相應(yīng)版本颅崩,先升級(jí)GLIBC,這個(gè)一定要慎重蕊苗,裝錯(cuò)了可能機(jī)器就啟動(dòng)不了沿后,你就涼了
安裝步驟如下:
8.1、先拉取壓縮包并進(jìn)行解壓
cd /opt/software/glibc2.29
拉刃嗯椤:wget http://ftp.gnu.org/gnu/glibc/glibc-2.29.tar.gz
解壓:tar -zxvf glibc-2.29.tar.gz
8.2尖滚、創(chuàng)建build文件夾并編譯
mkdir build
cd build
../configure --prefix=/usr
make -j8
sudo make install
8.3、最后安裝完锅移,可能會(huì)有兩個(gè)報(bào)錯(cuò)熔掺,沒關(guān)系一樣用
查詢一下版本
ldd --version
9、解決第二個(gè)問題
9.1非剃、全局搜一下置逻,看看有沒有大于3.4.26版本的
find / -name "libstdc++.so.6.0.*"
我搜完之后,在docker容器中有高版本的备绽,直接復(fù)制一份到/usr/lib64下
cp /data/lib/docker/overlay2/037d450f681bfcfd8d2c46bd47c7d196b41faf07345ebc138c0c873f5821a7ef/diff/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28 /usr/lib64
9.2券坞、查看軟連接的原始文件路徑
readlink -f /lib64/libstdc++.so.6
# 備份軟連接
mv /lib64/libstdc++.so.6 /lib64/libstdc++.so.6.bak
9.3、將新的文件【/usr/lib64/libstdc++.so.6.0.28】軟連接到【/lib64/libstdc++.so.6】上
ln -s /usr/lib64/libstdc++.so.6.0.28 /lib64/libstdc++.so.6