2014-02-27 73 views
1

我使用cmake在Ubuntu 12.04上安裝了opencv 2.4.3。在安裝時,.so文件放在/ usr/local/lib目錄中。當我使用下面的行終端使用.so文件的默認位置(即在/ usr/local/lib目錄)編譯我的代碼,然後它工作正常使用共享目標文件

g++ fileName.cpp -lopencv_core -lopencv_highgui -lopencv_imgproc 

我試圖與共享對象文件進行試驗。我從/ usr/local/bin複製了所需的共享對象文件,並將它們放在一個新的文件夾位置/ home/nishant/Desktop/lib中。我複製以下文件和它們各自的.so.2.4和.so.2.4.3文件:
1)libopencv_core.so
2)libopencv_highgui.so
3)libopencv_imgproc.so

然後,我改變有分別命名爲libcore.so,libhighgui.so和libimgproc.so。我改變了他們的名字,以便舊的.so文件不應該從/ usr/local/lib中使用。現在,當我嘗試使用新的文件夾位置的共享對象文件編譯我的代碼,然後我得到以下錯誤:

終端命令:

g++ filename.cpp -L/home/nishant/Desktop/lib -lcore -lhighgui -limgproc 

錯誤:

/usr/bin/ld: cannot find -lcore 
/usr/bin/ld: cannot find -lhighgui 
/usr/bin/ld: cannot find -limgproc 
collect2: ld returned 1 exit status 


它有趣的是請注意下列作品:

g++ filename.cpp -L/home/nishant/Desktop/lib -lopencv_core -lopencv_highgui -lopencv_imgproc 

原因:正在使用/ usr/local/lib中的.so文件。

我的問題:如何使用新文件夾位置的.so文件來使我的代碼正常工作。

+0

您確定/home/nishant/Desktop/lib/libcore.so是否是實際的庫文件,或者如果不是,符號鏈接指向正確的路徑?如果您只是重命名符號鏈接,則不會更改其目標,而必須重新創建指向重命名目標的鏈接。使用'ls -l'來列出符號鏈接目標。 – isedev

回答

1

我看到三種方式:

1. 請更新您的LD_LIBRARY_PATH - 運行g++之前路徑添加到您的庫。

2. 請添加您的庫位於/etc/ld.so.conf和運行目錄:

sudo ldconfig 

然後運行g++

3. 請創建一個新文件:/etc/ld.so.conf.d/local.conf,並添加路徑,與你的庫的目錄並運行:

sudo ldconfig 

然後運行G ++。