2017-02-04 162 views
1

我刚刚开始使用OpenCV。我有一个Raspberry Pi和Pi相机,我想学习OpenCV以用于机器视觉项目。我正在使用vi编写C代码,在Raspberry Pi上编写。我对Linux有点新鲜,在编辑器中编写代码而不是在IDE中是绝对新的!连接opencv库的麻烦

我能够从Github上下载OpenCV仓库并编译它,而不麻烦。 OpenCV(3.2.0)已安装。

我开始按照这里的教程:http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_gcc_cmake/linux_gcc_cmake.html#linux-gcc-usage

我输入正确的密码,然后取得了CMake的文件。

这里是我的CMakeLists.txt文件:

cmake_minimum_required(VERSION 2.8) 
project(DisplayImage) 
find_package(OpenCV COMPONENTS core imgproc highgui REQUIRED) 
add_executable(DisplayImage DisplayImage.cpp) 
target_link_libraries(DisplayImage ${OpenCCV_LIBS}) 
LINK_DIRECTORIES("/usr/local/lib") 

我试图使该项目,但它似乎有错误链接库。我是新手,无法确定它是否是版本冲突,库缺失,或者只是链接器正在寻找错误位置的库。

下面是当make命令由输出:

[email protected]:~/Programming $ cmake . 
-- Found OpenCV: /usr/local (found version "3.2.0") found components:   core imgproc highgui 
-- Configuring done 
-- Generating done 
-- Build files have been written to: /home/pi/Programming 
[email protected]:~/Programming $ make 
[ 50%] Linking CXX executable DisplayImage 
CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o: In function `main': 
DisplayImage.cpp:(.text+0x6c): undefined reference to `cv::imread(cv::String const&, int)' 
DisplayImage.cpp:(.text+0xd4): undefined reference to `cv::namedWindow(cv::String const&, int)' 
DisplayImage.cpp:(.text+0x118): undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)' 
DisplayImage.cpp:(.text+0x138): undefined reference to `cv::waitKey(int)' 
CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o: In function `cv::String::String(char const*)': 
DisplayImage.cpp:(.text._ZN2cv6StringC2EPKc[_ZN2cv6StringC5EPKc]+0x50): undefined reference to `cv::String::allocate(unsigned int)' 
CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o: In function `cv::String::~String()': 
DisplayImage.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0x14): undefined reference to `cv::String::deallocate()' 
CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o: In function `cv::String::operator=(cv::String const&)': 
DisplayImage.cpp: (.text._ZN2cv6StringaSERKS0_[_ZN2cv6StringaSERKS0_]+0x30): undefined reference to `cv::String::deallocate()' 
CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o: In function `cv::Mat::~Mat()': 
DisplayImage.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x3c): undefined reference to `cv::fastFree(void*)' 
CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o: In function `cv::Mat::operator=(cv::Mat const&)': 
DisplayImage.cpp:(.text._ZN2cv3MataSERKS0_[_ZN2cv3MataSERKS0_]+0x140): undefined reference to `cv::Mat::copySize(cv::Mat const&)' 
CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o: In function `cv::Mat::release()': 
DisplayImage.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x68): undefined reference to `cv::Mat::deallocate()' 
collect2: error: ld returned 1 exit status 
CMakeFiles/DisplayImage.dir/build.make:94: recipe for target 'DisplayImage' failed 
make[2]: *** [DisplayImage] Error 1 
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/DisplayImage.dir/all' failed 
make[1]: *** [CMakeFiles/DisplayImage.dir/all] Error 2 
Makefile:83: recipe for target 'all' failed 
make: *** [all] Error 2 
[email protected]:~/Programming $ 

下一步是什么?在Linux中对链接错误进行故障排除的过程是什么?/ OpenCV 您可以提供的任何见解都将不胜感激!

回答

0

一些东西......

  • 您已经在CMakeLists.txt

  • 拼写错误OpenCVV_LIBS我想你也需要include_directories(${OpenCV_INCLUDE_DIR})

  • 我觉得乱源建立是首选,这意味着您创建一个名为build的子目录,但不在版本控制下,但在目录中含CMakeLists.txtcd build然后cmake ..

+0

真棒谢谢你马克, – FrankieForceps

+0

好ectory我纠正了OpenCV_LIBS中的CMakeLists.txt文件,并提出了构建目录如你所说。对于include_directories,我是否直接输入“OpenCV_INCLUDE_DIR”,还是意味着指向OpenCV目录的路径?我想我不确定路径变量在Linux/OpenCV中的工作方式。谢谢你的帮助! – FrankieForceps