2016-01-15 76 views
1

我在Red Hat Linux上。我在C++文件中遇到了一些(可能是新手)問題。我在我進入使用OpenCV標頭編譯C++文件時沒有此類文件或目錄錯誤

g++ my_simple_script.cpp 

終端創建了以下簡單的OpenCV的腳本,

#include "opencv2/highgui/highgui.hpp" 
using namespace cv; 

int main(int argc, char ** argv){ 
    Mat img = imread(argv[1], -1); 
    if (img.empty()) return -1; 
    namedWindow("Example1", cv::WINDOW_AUTOSIZE); 
    imshow("Example1", img); 
    waitKey(0); 
    destroyWindow("Example1"); 
} 

然後,得到了錯誤

newfile.cpp:1:39: error: opencv2/highgui/highgui.hpp: No such file or directory 
newfile.cpp:3: error: 'cv' is not a namespace-name 
newfile.cpp:3: error: expected namespace-name before ';' token 
newfile.cpp: In function 'int main(int, char**)': 
newfile.cpp:6: error: 'Mat' was not declared in this scope 
newfile.cpp:6: error: expected ';' before 'img' 
newfile.cpp:7: error: 'img' was not declared in this scope 
newfile.cpp:8: error: 'cv' has not been declared 
newfile.cpp:8: error: 'namedWindow' was not declared in this scope 
newfile.cpp:9: error: 'img' was not declared in this scope 
newfile.cpp:9: error: 'imshow' was not declared in this scope 
newfile.cpp:10: error: 'waitKey' was not declared in this scope 
newfile.cpp:11: error: 'destroyWindow' was not declared in this scope 

我加

/home/m/maxwell9/2.4.3/include 

我PATH,其中2.4.3表示給出了我使用的OpenCV版本。 當我鍵入

echo $PATH 

我看到

/opt/apps/jdk1.6.0_22.x64/bin:/apps/smlnj/110.74/bin:/usr/local/cuda/bin:/sbin:/bin:/usr/sbin:/usr/bin:/apps/weka/3.7.12:/home/m/maxwell9/bin:/home/m/maxwell9/2.4.3/include 

我證實,在

/home/m/maxwell9/2.4.3/include/opencv2/highgui/highgui.hpp 

回答

3

只需添加包含路徑只會解決您的編譯問題。你仍然會看到鏈接器錯誤..(和正確的方式添加include路徑是使用-I標誌,PATH不用於此..)

要成功編譯和鏈接您的程序,您需要指定包括頭文件和鏈接路徑預編譯的OpenCV庫和鏈接庫列表路徑...

  1. 標準的方式,已經安裝了OpenCV的標準安裝目錄,通過使用以下序列

    sudo make install (from your OpenCV build library) 
    echo '/usr/local/lib' | sudo tee -a /etc/ld.so.conf.d/opencv.conf 
    sudo ldconfig 
    printf '# OpenCV\nPKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig\nexport PKG_CONFIG_PATH\n' >> ~/.bashrc 
    source ~/.bashrc 
    

下會編譯併成功將您的計劃爲您提供:

g++ my_simple_script.cpp `pkg-config --libs opencv` `pkg-config --cflags opencv` 
  • 但很顯然,當你試圖指向你還沒有做到這一點..非標準包含路徑。因此,在你的情況,你將需要使用-l<name_of_library>

    g++ my_simple_script.cpp -I /home/m/maxwell9/2.4.3/include -L /home/m/maxwell9/2.4.3/<your build directory name>/lib/ -lopencv_core 
    
  • 指定include路徑明確使用 -I標誌和 -L標誌的預編譯庫路徑,並列出所有你可能需要使用單獨的庫

    (您可能需要的其他openCV庫的列表必須附加到上述命令使用格式:-l<name of the lib you need>

    +0

    我選擇了一個奇怪的目錄,因爲我在學校的一臺電腦,並沒有sudo特權。現在在家裏,在Ubuntu上,將嘗試從源代碼構建OpenCV。您是否有鏈接到安裝說明的好頁面?我特別想知道在構建OpenCV之前是否需要安裝依賴關係。我在網上找到了一些OpenCV的安裝說明,所以我不確定選擇哪一個。官方在opencv.org上安裝Linux的說明列出了一些依賴性,但沒有提到使用ldconfig,我認爲這是必要的。 – Max

    +0

    這是一篇博客文章,向您介紹如何在Ubuntu 14.04中安裝OpenCV並支持CUDA(GPU):http://blog.aicry.com/ubuntu-14-04-install-opencv-with-cuda/ – jsb097

    1

    的文件的路徑沒有關係,你需要添加包含路徑編譯器包含路徑(gcc的-I參數)。或者轉到CPLUS_INCLUDE_PATH環境變量。

    相關問題