错误:'vector'未命名类型/错误:'<'令牌之前的预期','或'...'/错误:尚未声明'vector'



我在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 以查看请求的每个库,以及为库搜索拼写的每个路径。

相关内容

  • 没有找到相关文章

最新更新