解决undefined reference to cv::VideoCapture::VideoCapture()
在使用OpenCV进行图像或视频处理时,有时会遇到类似于undefined reference to cv::VideoCapture::VideoCapture()`的错误信息。这个错误通常表示找不到相应的函数或类的定义。
问题背景
OpenCV是一个开源的计算机视觉库,提供了许多图像和视频处理相关的函数和类。其中,VideoCapture是一个用于从摄像头或视频文件中读取帧的类。当我们在编译代码时,如果出现undefined reference to cv::VideoCapture::VideoCapture()`的错误信息,就意味着编译器无法找到相应的函数定义。
解决方法
出现undefined reference to cv::VideoCapture::VideoCapture()`的错误通常是由于链接器无法找到相应的库文件引起的。要解决这个问题,我们需要确保以下几点:
plaintextCopy codepkg-config --modversion opencv
如果OpenCV没有正确安装或版本不匹配,我们需要重新安装或更新OpenCV。
bashCopy codeg++ -o outputfile program.cpp `pkg-config --libs opencv`
此命令中,-o参数用于指定输出文件的名称,program.cpp是待编译的源代码文件,而pkg-config --libs opencv用于获取OpenCV的库文件名并链接。
总结
当编译代码时遇到undefined reference to cv::VideoCapture::VideoCapture()的错误信息时,我们需要检查OpenCV的安装、编译命令和库文件路径等方面。如果以上步骤都正确,就应该能够解决这个问题并成功编译运行程序。 希望本篇文章对你解决undefined reference to cv::VideoCapture::VideoCapture()
但是在交叉编译自己写的程序是总是提示有错误,错误如下:
In file included from main.cpp:3:
./database.h:3:23: QSqlDatabase: No such file or directory
./database.h:4:20: QSqlQuery: No such file or directory
In file included from main.cpp:3:
./database.h: In function `bool createConnection()':
./database.h:8: error: `QSqlDatabase' was not declared in this scope
./database.h:8: error: expected `;' before "db"
./database.h:9: error: `db' was not declared in this scope
./database.h:8: warning: unused variable 'QSqlDatabase'
make: *** [main.o] 错误
提示没有这两个文件或目录?明明在我的include里面怎么会没有?我想尽一切办法,又是该边境变量,又是删除编译文件重新编译,最后还是不行,我一遍一遍的查看include目录,最后发现错误提示的两个文件在include/QtSql/下面所以我就把程序的包含文件目录该了一下原来为:#include,#include改过后为:#include,#include就是在原来的基础上增加一个目录前缀,这样问题就解决了,这个编译通过,但是下面又出现了错误,错误如下:songlist.cpp:6:20: QSqlQuery: No such file or directory
songlist.cpp:12: error: `songlist' has not been declared
songlist.cpp:12: error: ISO C++ forbids declaration of `songlist' with no type
songlist.cpp: In function `int songlist(QWidget*)':
songlist.cpp:12: error: only constructors take base initializers
songlist.cpp:16: error: `ui' was not declared in this scope
songlist.cpp:16: error: invalid use of `this' in non-member function
songlist.cpp:20: error: `model' was not declared in this scope
songlist.cpp:20: error: `QSqlTableModel' has not been declared
songlist.cpp:20: error: invalid use of `this' in non-member function
songlist.cpp:31: error: `model2' was not declared in this scope
songlist.cpp:31: error: `QSqlTableModel' has not been declared
songlist.cpp:31: error: invalid use of `this' in non-member function
songlist.cpp: At global scope:
songlist.cpp:46: error: expected constructor, destructor, or type conversion before '::' token
songlist.cpp:51: error: `songlist' is not a class or namespace
songlist.cpp: In function `void changeEvent(QEvent*)':
songlist.cpp:53: error: cannot call member function `virtual void QWidget::changeEvent(QEvent*)' without object
songlist.cpp:56: error: `ui' was not declared in this scope
songlist.cpp:56: error: invalid use of `this' in non-member function
songlist.cpp:56: warning: unused variable 'ui'
songlist.cpp: At global scope:
songlist.cpp:63: error: `songlist' is not a class or namespace
songlist.cpp: In function `void on_pushButton_clicked()':
songlist.cpp:65: error: `ui' was not declared in this scope
songlist.cpp:70: error: `model' was not declared in this scope
songlist.cpp:80: error: `model2' was not declared in this scope
songlist.cpp:65: warning: unused variable 'ui'
songlist.cpp: At global scope:
songlist.cpp:87: error: `songlist' is not a class or namespace
songlist.cpp: In function `void on_pushButton_4_clicked()':
songlist.cpp:89: error: `ui' was not declared in this scope
songlist.cpp:90: error: `model2' was not declared in this scope
songlist.cpp:92: error: `Dir' was not declared in this scope
songlist.cpp:93: error: `prefix' was not declared in this scope
songlist.cpp:94: error: `PATH' was not declared in this scope
songlist.cpp:97: error: `play1' was not declared in this scope
songlist.cpp:97: warning: unused variable 'play1'
songlist.cpp: At global scope:
songlist.cpp:103: error: `songlist' is not a class or namespace
songlist.cpp: In function `void on_pushButton_3_clicked()':
songlist.cpp:105: error: `ui' was not declared in this scope
songlist.cpp:106: error: `model2' was not declared in this scope
songlist.cpp:105: warning: unused variable 'ui'
songlist.cpp: At global scope:
songlist.cpp:110: error: `songlist' is not a class or namespace
songlist.cpp: In function `void on_pushButton_2_clicked()':
songlist.cpp:115: error: invalid use of `this' in non-member function
database.h: At global scope:
database.h:7: warning: 'bool createConnection()' defined but not used
make: *** [songlist.o] 错误
交叉编译真是让人头大啊!从错误开始的地方找,添加头目录,发现问题还是没有解决,于是就查看songlist.h发现里面什么东西都没了,还提示任何的改动都可能造成文件内容丢失,于是就重新建立了一个工程,继续交叉编译,前面的问题都解决了 ,但是又出现了新的错误,错误如下:main.o: In function `main':
main.cpp:(.text+0x210): undefined reference to `QSqlQuery::~QSqlQuery()'
main.cpp:(.text+0x220): undefined reference to `QSqlDatabase::~QSqlDatabase()'
main.cpp:(.text+0x794): undefined reference to `QSqlDatabase::addDatabase(QString const&, QString const&)'
main.cpp:(.text+0x858): undefined reference to `QSqlDatabase::~QSqlDatabase()'
main.cpp:(.text+0xbac): undefined reference to `QSqlDatabase::setDatabaseName(QString const&)'
main.cpp:(.text+0xc48): undefined reference to `QSqlDatabase::open()'
main.cpp:(.text+0xcf0): undefined reference to `QSqlQuery::~QSqlQuery()'
main.cpp:(.text+0xd00): undefined reference to `QSqlDatabase::~QSqlDatabase()'
main.cpp:(.text+0xd68): undefined reference to `QSqlDatabase::QSqlDatabase()'
main.cpp:(.text+0xd80): undefined reference to `QSqlQuery::QSqlQuery(QString const&, QSqlDatabase)'
main.cpp:(.text+0xd90): undefined reference to `QSqlDatabase::~QSqlDatabase()'
main.cpp:(.text+0xe98): undefined reference to `QSqlQuery::exec(QString const&)'
main.cpp:(.text+0xef8): undefined reference to `QSqlDatabase::defaultConnection'
main.cpp:(.text+0xf90): undefined reference to `QSqlQuery::exec(QString const&)'
main.cpp:(.text+0x1038): undefined reference to `QSqlQuery::exec(QString const&)'
main.cpp:(.text+0x10e0): undefined reference to `QSqlQuery::exec(QString const&)'
main.cpp:(.text+0x1188): undefined reference to `QSqlQuery::exec(QString const&)'
main.cpp:(.text+0x1230): undefined reference to `QSqlQuery::exec(QString const&)'
main.o:main.cpp:(.text+0x12d8): more undefined references to `QSqlQuery::exec(QString const&)' follow
songlist.o: In function `songlist::songlist(QWidget*)':
songlist.cpp:(.text+0x1ac): undefined reference to `QSqlQuery::~QSqlQuery()'
songlist.cpp:(.text+0x47c): undefined reference to `QSqlDatabase::~QSqlDatabase()'
songlist.cpp:(.text+0x5b0): undefined reference to `QSqlDatabase::QSqlDatabase()'
songlist.cpp:(.text+0x5d8): undefined reference to `QSqlTableModel::QSqlTableModel(QObject*, QSqlDatabase)'
songlist.cpp:(.text+0x5f4): undefined reference to `QSqlDatabase::~QSqlDatabase()'
songlist.cpp:(.text+0x7c0): undefined reference to `QSqlDatabase::QSqlDatabase()'
songlist.cpp:(.text+0x7e8): undefined reference to `QSqlTableModel::QSqlTableModel(QObject*, QSqlDatabase)'
songlist.cpp:(.text+0x804): undefined reference to `QSqlDatabase::~QSqlDatabase()'
songlist.cpp:(.text+0x8cc): undefined reference to `QSqlQueryModel::query() const'
songlist.cpp:(.text+0x9d0): undefined reference to `QSqlQuery::~QSqlQuery()'
songlist.o: In function `songlist::songlist(QWidget*)':
songlist.cpp:(.text+0xbb8): undefined reference to `QSqlQuery::~QSqlQuery()'
songlist.cpp:(.text+0xe88): undefined reference to `QSqlDatabase::~QSqlDatabase()'
songlist.cpp:(.text+0xfbc): undefined reference to `QSqlDatabase::QSqlDatabase()'
songlist.cpp:(.text+0xfe4): undefined reference to `QSqlTableModel::QSqlTableModel(QObject*, QSqlDatabase)'
songlist.cpp:(.text+0x1000): undefined reference to `QSqlDatabase::~QSqlDatabase()'
songlist.cpp:(.text+0x11cc): undefined reference to `QSqlDatabase::QSqlDatabase()'
songlist.cpp:(.text+0x11f4): undefined reference to `QSqlTableModel::QSqlTableModel(QObject*, QSqlDatabase)'
songlist.cpp:(.text+0x1210): undefined reference to `QSqlDatabase::~QSqlDatabase()'
songlist.cpp:(.text+0x12d8): undefined reference to `QSqlQueryModel::query() const'
songlist.cpp:(.text+0x13dc): undefined reference to `QSqlQuery::~QSqlQuery()'
songlist.o: In function `songlist::on_pushButton_clicked()':
songlist.cpp:(.text+0x2f38): undefined reference to `QSqlTableModel::submitAll()'
songlist.o: In function `songlist::on_pushButton_4_clicked()':
songlist.cpp:(.text+0x43d0): undefined reference to `QSqlTableModel::submitAll()'
songlist.o: In function `songlist::on_pushButton_3_clicked()':
songlist.cpp:(.text+0x47b8): undefined reference to `QSqlTableModel::submitAll()'
collect2: ld returned 1 exit status
make: *** [SKTV] 错误
终于解决了,问题终于解决了。
问题原因:由于交叉编译是使用qte的qmake -project手动建立的工程文件,无法自动判断是否包含数据库,所以我们如果使用了数据库既要手动在工程文件的最后添加一句话,
QT +=sql
!
linux下QT编译出现collect2:ld returned 1 exit status错误的原因之一是未安装mesa
sudo apt install libgl1-mesa-dev
1
重启qt
自己遇到的原因是:链接库问题
在.pro文件里:
# opencv
INCLUDEPATH += /usr/local/include \
/usr/local/include/opencv \
/usr/local/include/opencv2
LIBS += -L/usr/local/lib/libopencv_*.so
改成:
# opencv
INCLUDEPATH += /usr/local/include \
/usr/local/include/opencv \
/usr/local/include/opencv2
LIBS += -L /usr/local/lib/libopencv_*.so
或:(若使用以上链接库的方式出现undefined undefined reference to xxx的情况,我尝试将opencv的库罗列出来,就编译通过了)
错误提示:/home/user/qttest/doubleimg/camera.cpp:13: error: QCamera: No such file or directory
#include
在pro工程管理文件里改下: QT += multimedia 保存
.pro文件里面加入,再点击保存,就好了
QT += multimedia
QT += multimediawidgets
问题描述:make过程出现如下报错——
[ 82%] Building CXX object CMakeFiles/dwsr_wholes.dir/src/yolov5.cpp.o
[ 88%] Linking CXX executable dwsr_wholes
常规方法
使用如下代码,在定义头文件的时候加在首尾
#ifndef ***_H
#define ***_H
/*
代码
*/
#endif
如果得不到解决,并且在全局中搜多不到对应函数的多次定义记录,那么可能遇到的问题是多次加载某个定义,使用以下方法
核心原因,多次定义原因在于嵌套定义,新定义的头文件最好不要在头文件里面进行include,同时严格遵照编码准则,方法定义写在cpp里面,不要把方法直接写在头文件里面。