ubuntu下多版本opencv切換

的第三方庫當中,所以我決定再裝2.4版本。 在win平臺上面,多版本只需要添加多個環境變量即可,同理,linux下面也是通過改變環境變量設置達到多版本的目的。

首先需要了解pkg-config這個包管理工具,關於opencv的包含和庫的路徑的識別,都是依賴於這個管理工具的.pc文件,具體內容自行google。

還需要一提的是,我們要分清楚一下幾個關鍵文件的作用和不同。

/etc/bash.bashrc                                         //系統變量,(方法1)可通過向其添加指向opencv.pc的變量路徑以達到系統識別的目的
/home/jiluobo/.bashrc                               //用戶變量,(方法2)可通過向其添加指向opencv.pc的變量路徑以達到系統識別的目的
/etc/ld.so.conf                                              //編譯時鏈接庫的路徑,一般內容為:include /etc/ld.so.conf.d/*.conf
/etc/ld.so.conf.d/*.conf                               //存放各.pc文件的鏈接庫路徑
/usr/lib/pkgconfig/*.pc                              //pkg-config工具識別的.pc文件

好了,不費話,多版本切換的方法有許多,好處也是多多滴,這裡我選擇一種最方便,而且需要卸載時都沒有任何殘留的方式。

這裡選擇從編譯opencv開始,可以按自己需要選擇性觀看,以便出錯時回頭查錯:


cmake -D CMAKE_INSTALL_PREFIX=/home/shihyu/.mybin/opencv-2.4.13 \
      -D CMAKE_PREFIX_PATH=/home/shihyu/.mybin/opencv-2.4.13/share/OpenCV \
      -D BUILD_NEW_PYTHON_SUPPORT=ON \
      -D CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -D_FORCE_INLINES" \
      -D CMAKE_BUILD_TYPE:STRING=RelWithDebInfo \
      -D CMAKE_BUILD_TYPE=DEBUG \
      -D WITH_CUDA=OFF ..


cmake -D CMAKE_INSTALL_PREFIX=/home/shihyu/.mybin/opencv-3.3.1 \
      -D CMAKE_PREFIX_PATH=/home/shihyu/.mybin/opencv-3.3.1/share/OpenCV \
      -D BUILD_NEW_PYTHON_SUPPORT=ON \
      -D CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -D_FORCE_INLINES" \
      -D CMAKE_BUILD_TYPE:STRING=RelWithDebInfo \
      -D CMAKE_BUILD_TYPE=DEBUG \
      -D WITH_CUDA=OFF ..



//添加pkg-config包路徑信息
sudo cp ~/.mybin/opencv-2.4.13/lib/pkgconfig/opencv.pc /usr/lib/pkgconfig/opencv2.pc
sudo cp ~/.mybin/opencv-3.3.1/lib/pkgconfig/opencv.pc /usr/lib/pkgconfig/opencv3.pc

//添加鏈接庫路徑
sudo vim /etc/ld.so.conf.d/opencv2.conf
/home/shihyu/.mybin/opencv-2.4.13/lib/

sudo vim /etc/ld.so.conf.d/opencv3.conf
/home/shihyu/.mybin/opencv-3.3.1/lib

sudo ldconfig
//刷新

查看opencv版本:

pkg-config --modversion opencv2
pkg-config --modversion opencv3

編譯工程時:

g++ main.cpp -o main `pkg-config --libs --cflags opencv2`
//選擇2版本編譯
g++ main.cpp -o main `pkg-config --libs --cflags opencv3`
//選擇3版本編譯

使用qt建立工程時,在工程.pro文件中添加:

INCLUDEPATH += /usr/local/opencv2.4.9/include \
                               /usr/local/opencv2.4.9/include/opencv \
                               /usr/local/opencv2.4.9/include/opencv2
LIBS += /usr/local/opencv2.4.9/lib/*.so
//249版本
INCLUDEPATH += /usr/local/opencv3.1.0/include \
                               /usr/local/opencv3.1.0/include/opencv \
                               /usr/local/opencv3.1.0/include/opencv2
LIBS += /usr/local/opencv3.1.0/lib/*.so
//310版本

使用CMake編譯工程時:

在CMakeLists.txt 裡面加入不同版本路徑 set(OpenCV_DIR /home/shihyu/.mybin/opencv-3.3.1/share/OpenCV) find_package(OpenCV)

在相應版本的opencv安裝目錄下(/usr/local/opencv-2.4.9/share/OpenCV)查找OpenCVConfig.cmake,然後使用文件所在的那個路徑

#!/bin/sh

if [ $# -gt 0 ] ; then
    base=`basename $1 .cpp`
    echo "compiling $base"
    g++ -ggdb `pkg-config --cflags opencv` $base.cpp -o $base `pkg-config --libs opencv`
else
    for i in *.c; do
        echo "compiling $i"
        gcc -ggdb `pkg-config --cflags opencv` -o `basename $i .c` $i `pkg-config --libs opencv`;
    done
    for i in *.cpp; do
        echo "compiling $i"
        g++ -ggdb `pkg-config --cflags opencv` -o `basename $i .cpp` $i `pkg-config --libs opencv`;
    done
fi

cmake -D CMAKE_INSTALL_PREFIX=/home/shihyu/.mybin/opencv-2.4.13 \
      -D CMAKE_PREFIX_PATH=/home/shihyu/.mybin/opencv-2.4.13/share/OpenCV \
      -D BUILD_NEW_PYTHON_SUPPORT=ON \
      -D CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -D_FORCE_INLINES" \
      -D CMAKE_BUILD_TYPE:STRING=RelWithDebInfo \
      -D CMAKE_BUILD_TYPE=DEBUG \
      -D WITH_CUDA=OFF ..



cmake -D CMAKE_INSTALL_PREFIX=/home/shihyu/.mybin/opencv-3.2.0 \
      -D CMAKE_PREFIX_PATH=/home/shihyu/.mybin/opencv-3.2.0/share/OpenCV \
      -D BUILD_NEW_PYTHON_SUPPORT=ON \
      -D CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -D_FORCE_INLINES" \
      -D CMAKE_BUILD_TYPE:STRING=RelWithDebInfo \
      -D CMAKE_BUILD_TYPE=DEBUG \
      -D WITH_CUDA=OFF ..


-D WITH_CUDA=OFF // cuda disable

編譯工程時:

g++ -ggdb `pkg-config --cflags opencv-2.4.13`  main.cpp -o main `pkg-config --libs opencv-2.4.13`
//選擇2.4.13版本編譯

g++ -ggdb `pkg-config --cflags opencv-3.2.0`  main.cpp -o main `pkg-config --libs opencv-3.2.0`
//選擇3.2.0版本編譯
cd /home/shihyu/.mybin/opencv-2.4.13/lib/pkgconfig
mv opencv.pc opencv-2.4.13.pc

cd /home/shihyu/.mybin/opencv-3.2.0/lib/pkgconfig
mv opencv.pc opencv-3.2.0.pc


cd /etc/ld.so.conf.d

vim opencv2.conf
/home/shihyu/.mybin/opencv-2.4.13/lib/

vim opencv3.conf
/home/shihyu/.mybin/opencv-3.2.0/lib/

~/.bashrc
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/shihyu/.mybin/opencv-2.4.13/lib/pkgconfig
export PKG_CONFIG_PATH

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/shihyu/.mybin/opencv-3.2.0/lib/pkgconfig
export PKG_CONFIG_PATH

查看opencv版本:

pkg-config --modversion opencv-2.4.13
pkg-config --modversion opencv-3.2.0
  • build_all.sh
#!/bin/sh

if [ $# -gt 0 ] ; then
    base=`basename $1 .c`
    echo "compiling $base"
    gcc -ggdb `pkg-config opencv --cflags --libs` $base.c -o $base
else
    for i in *.c; do
        echo "compiling $i"
        gcc -ggdb `pkg-config --cflags opencv` -o `basename $i .c` $i `pkg-config --libs opencv`;
    done
    for i in *.cpp; do
        echo "compiling $i"
        g++ -ggdb `pkg-config --cflags opencv` -o `basename $i .cpp` $i `pkg-config --libs opencv`;
    done
fi
cd /home/jiluobo/
git clone https://github.com/opencv/opencv.git
//git opencv 源碼
cp -rf opencv opencvbackup
//備份防止出錯
cd opencv
mkdir opencv249
mkdir opencv310
//添加生成不同版本目錄
git checkout 2.4.9
//切換版本
cd opencv249
cmake -D CMAKE_INSTALL_PREFIX=/usr/local/opencv2.4.9 -D CMAKE_PREFIX_PATH=/usr/local/opencv2.4.9/share/OpenCV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -D_FORCE_INLINES" ../
//兩個-D選項為多版本關鍵設置,此處省略了其他可選設置,根據自己情況添加,默認也可以
make -j8
//編譯
sudo make install
//安裝
cd ../
git checkout 3.1.0
cd opencv310
cmake -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.1.0 -D CMAKE_PREFIX_PATH=/usr/local/opencv3.1.0/share/OpenCV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -D_FORCE_INLINES" ../
//兩個-D選項為多版本關鍵設置,此處省略了其他可選設置,根據自己情況添加,默認也可以
make -j8
//編譯
sudo make install
//安裝

sudo cp /usr/local/opencv2.4.9/lib/pkgconfig/opencv.pc /usr/lib/pkgconfig/opencv249.pc
//添加pkg-config包路徑信息
sudo cp /usr/local/opencv3.1.0/lib/pkgconfig/opencv.pc /usr/lib/pkgconfig/opencv310.pc
//添加pkg-config包路徑信息

sudo nano /etc/ld.so.conf.d/opencv249.conf
>>/usr/local/opencv2.4.9/lib
//添加鏈接庫路徑
sudo nano /etc/ld.so.conf.d/opencv310.conf
>>/usr/local/opencv3.1.0/lib

sudo ldconfig
//刷新

1、假如安裝了opencv以下兩個版本:

opencv-2.4.13 
opencv-3.2.0

2、安裝目錄分別為:

/usr/local/opencv-2.4.13 
/usr/local/opencv-3.2.0

3、opencv-2.4.13切換為opencv-3.2.0

默認版本為/usr/local/opencv-2.4.13

4、打開終端,輸入以下命令:

1、打開文件:

sudo gedit ~/.bashrc

2、在文件末尾添加以下內容,然後保存:

export PKG_CONFIG_PATH=/usr/local/opencv-3.2.0/lib/pkgconfig  
export LD_LIBRARY_PATH=/usr/local/opencv-3.2.0/lib

3、輸入命令:

source ~/.bashrc

4、繼續輸入

pkg-config --modversion opencv  
pkg-config --cflags opencv  
pkg-config --libs opencv

以上步驟完成,即為替換完成,如果想從opencv-3.2.0切換回去,步驟同上。