當前位置: 首頁>>技術問答>>正文


openCV程序編譯錯誤“libopencv_core.so.2.4:無法打開共享對象文件:沒有這樣的文件或目錄”在ubuntu 12.04中

, , ,

問題描述

我在ubuntu 12.04中編譯並安裝了openCV 2.4.2。在/usr/local/include下,我可以看到目錄/usr/local/opencv/usr/local/opencv2

這是我寫的代碼:

#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc,char **argv)
{
   Mat image;
   image = imread(argv[1],1);

   if(argc != 2 || !image.data)
   {
       cout << "No image data\n";
       return -1;
   }

   namedWindow("Display Image",CV_WINDOW_AUTOSIZE);
   imshow("Display Image",image);
   waitKey(0);
   return 0;
}

我使用此命令行編譯它:

g++ DisplayImage.cpp -o DisplayImage `pkg-config opencv --cflags --libs` 

沒有編譯時錯誤,但是當我嘗試使用/DisplayImage code.png運行生成的二進製文件時,我收到以下錯誤消息:

./DisplayImage: error while loading shared libraries: libopencv_core.so.2.4: cannot open shared object file: No such file or directory

最佳解決方法

您尚未將共享庫放在加載程序可以找到它的位置。查看/usr/local/opencv/usr/local/opencv2文件夾,看看它們中是否包含任何共享庫(文件以lib開頭,通常以.so結尾)。當你找到它們時,創建一個名為/etc/ld.so.conf.d/opencv.conf的文件,並向其寫入存儲庫的文件夾的路徑,每行一個。

例如,如果庫存儲在/usr/local/opencv/libopencv_core.so.2.4下,那麽我會將其寫入我的opencv.conf文件:

/usr/local/opencv/

然後跑

sudo ldconfig -v

如果找不到庫,請嘗試運行

sudo updatedb && locate libopencv_core.so.2.4

在一個殼裏。如果在編譯OpenCV後重新啟動,則無需運行updatedb

參考文獻:

關於Linux上的共享庫:http://www.eyrie.org/~eagle/notes/rpath.html

關於添加OpenCV共享庫:http://opencv.willowgarage.com/wiki/InstallGuide_Linux

次佳解決方法

為了使它更清晰(並將其組合在一起),我必須做上麵提到的兩件事。

1-創建一個文件/etc/ld.so.conf.d/opencv.conf並寫入存儲opencv庫的文件夾的路徑。(Cookyt的回答)

2-在LD_LIBRARY_PATH()中包含opencv的.so文件的路徑

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/opencv/lib

第三種解決方法

Umair R的答案主要是解決問題的正確方法,因為此錯誤曾經是由opencv庫和程序之間缺少的鏈接引起的。所以需要指定ld_libraty_path配置。 PS。通常的庫路徑假設為:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

我試過這個並且效果很好。

第四種方法

使用以下命令行查找包含共享庫libopencv_core.so.2.4的文件夾。

sudo find / -name "libopencv_core.so.2.4*"

然後我得到了結果:

 /usr/local/lib/libopencv_core.so.2.4.

創建一個名為/etc/ld.so.conf.d/opencv.conf的文件,並向其寫入存儲二進製文件的文件夾的路徑。例如,我將/usr/local/lib/寫入我的opencv.conf文件。運行命令行,如下所示。

sudo ldconfig -v

嘗試再次運行該命令。

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/7029.html,未經允許,請勿轉載。