我在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:包含在../ [..] / main.cpp:6:0中的文件中:
指的是我把opencv2 / gpu / gpu.hpp包含在其中的行。
我经常搜索Stackoverflow并在包含之前移动'使用命名空间std',但这只是改变了错误类型(它们都转向
错误:未定义引用`cv :: Mat :: zeros(int,int,int)'
或类似的东西)。
我放在代码顶部的包含是:
+
使用namespace std;
使用命名空间cv;
我的.pro项目文件是:
QT + =核心gui
greaterThan(QT_MAJOR_VERSION,4):QT + =小部件
TARGET = FinalMultimedia
TEMPLATE = app
LIBS + = -lopencv_core
LIBS + = -lopencv_imgproc
LIBS + = -lopencv_highgui
SOURCES + = main.cpp \
运行Makefile(make 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库根本没有出现(dunno为什么)。我正在使用刚刚运行更新/升级的gcc / g ++,所以我猜它将是5.1.1。我是一个完整的Linux初学者,所以我想弄清楚。有帮助吗?非常感谢你。
更新:
我尝试使用相同的代码创建一个新的Eclipse项目。我设置了正确的include / libraries(之前在ecplipse中使用过opencv / c ++)。我犯了同样的错误。 WTF
答案 0 :(得分:1)
移动命名空间行确实解决了编译问题。未定义的引用是一个链接问题。恭喜!那是进步。
现在您只需要确定哪个opencv lib具有该符号并确认您的搜索路径正在那里(它们可能不是)。您可以使用readelf
查看任何特定库中的符号。您丢失的符号可能应该在opencv_core中,但我不知道。你必须确认。 nm
也可以帮到你。使用man
查看它们的工作原理 - 两者都很简单。
您还可以跟踪Qt创建的make文件,并从命令行使用它。添加VERBOSE = 1以查看所要求的每个库,以及为库搜索拼写的每个路径。