我在Ubuntu 15.04上使用Qt Creator。我刚刚使用文档网站上提供的脚本安装了OpenCV 3.0(此处:https://help.ubuntu.com/community/OpenCV)。编译代码时,我收到一些错误(在运行脚本之前不存在):
/usr/include/opencv2/gpu/gpu.hpp:432:错误:"vector"未命名类型 CV_EXPORTS void merge(const vector& src, GpuMat&dst, Stream&stream = Stream::Null());
/usr/include/opencv2/gpu/gpu.hpp:432:错误:预期的","或"..."在"<"标记之前 [..]
/usr/include/opencv2/gpu/gpu.hpp:438:错误:"vector"尚未声明 [..]
除了第一个错误之外,所有错误都列在"gpu.hpp"中:
/[..]/main.cpp:6:在包含的文件中。/[..]/主.cpp:6:0:
参考我放置opencv2/gpu/gpu.hpp include的行。
我搜索了很多 Stackoverflow 并在包含之前移动了"使用命名空间 std",但这只会更改错误类型(它们都转向
错误:未定义对"cv::Mat::zeros(int, int, int)"的引用
或类似的东西)。
我放在代码顶部的包含是:
- 艾欧流
- STDIO.H OpenCV2/OpenCV.hpp, OpenCV2/HighGUI/highgui_c.h, OpenCV2/
- imgproc/imgproc_c.h, OpenCV2/GPU/GPU.hpp, OpenCV2/core/core.hpp
- 向量
- 数学.h
- 马斯
- 列表
- 弗流
- 字符串
- 约马尼普
+
使用命名空间标准;
使用命名空间 CV;
我的 .pro 项目文件是:
QT += 核心 GUI
大于(QT_MAJOR_VERSION, 4): QT += 小部件
目标 = 最终多媒体
模板 = 应用
库 += -lopencv_core
库 += -lopencv_imgproc
库 += -lopencv_highgui
来源 += 主.cpp\
运行生成文件(使 VERBOSE=1)我得到:
g++ -c -m64 -pipe -g -wall -W -D_REENTRANT -fPIE -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../try -I. -isystem/usr/include/x86_64-linux-gnu/qt5 -isystem/usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem/usr/include/x86_64-linux-gnu/qt5/QtGui -isystem/usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -o main.o ../try/main.cpp
其中 OpenCV 库根本不会出现(不知道为什么)。我正在使用 gcc/g++ 刚刚运行更新/升级,所以我想它会是 5.1.1。我是一个完整的 Linux 初学者,所以我试图弄清楚。有什么帮助吗?谢谢。
更新:
我尝试创建一个新的 Eclipse 项目,其中包含相同的代码。我设置了正确的包含/库(不久前一直在ecplipse中使用opencv/c ++)。我得到同样的错误。跆拳道
移动命名空间行确实解决了编译问题。 未定义的引用是一个链接问题。 恭喜! 这就是进步。
现在你只需要确定哪个opencv lib有这个符号,并确认你的搜索路径正在那里寻找(它们可能不是)。 您可以使用readelf
查看任何特定库中的符号。 你丢失的符号可能应该在opencv_core里面,但我不知道。 您必须确认。 nm
也可能对您有所帮助。 使用man
看看它们是如何工作的——两者都很容易。
您还可以跟踪Qt创建的make文件,并从命令行使用它。 添加 VERBOSE=1 以查看请求的每个库,以及为库搜索拼写的每个路径。