我刚刚开始使用OpenCV。我有一个Raspberry Pi和Pi相机,我想学习OpenCV以用于机器视觉项目。我正在使用vi编写C代码,在Raspberry Pi上编写。我对Linux有点新鲜,在编辑器中编写代码而不是在IDE中是绝对新的!连接opencv库的麻烦
我能够从Github上下载OpenCV仓库并编译它,而不麻烦。 OpenCV(3.2.0)已安装。
我输入正确的密码,然后取得了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 您可以提供的任何见解都将不胜感激!
真棒谢谢你马克, – FrankieForceps
好ectory我纠正了OpenCV_LIBS中的CMakeLists.txt文件,并提出了构建目录如你所说。对于include_directories,我是否直接输入“OpenCV_INCLUDE_DIR”,还是意味着指向OpenCV目录的路径?我想我不确定路径变量在Linux/OpenCV中的工作方式。谢谢你的帮助! – FrankieForceps