opencv - g++ 链接 OpenCV 演示没有找到 cv::_InputArray::_InputArray 和 cv::imshow
问题描述
在一台 PC 上,我尝试编译以下演示程序opencv2.cpp
,该程序从默认视频捕获设备获取图像以显示它们:
#include "opencv2/opencv.hpp"
using namespace cv;
int main ( const int argc, const char * const * const argv ) {
VideoCapture cap( 0 );
if( ! cap.isOpened() ) return 1;
Mat frame;
for ( ; ; ) {
cap >> frame;
if ( frame.empty() ) break;
imshow( "frame", frame );
if ( waitKey( 10 ) == 27 ) break;
}
return 0;
}
使用以下命令开始编译:
g++ "opencv2.cpp" -o "opencv2" -lopencv_core -lopencv_highgui -lopencv_videoio
链接失败并出现链接器错误:
/tmp/ccaEqcJr.o: In function `main':
opencv2.cpp:(.text+0x93): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
opencv2.cpp:(.text+0xc7): undefined reference to `cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)'
collect2: error: ld returned 1 exit status
Linux 系统使用 GCC 8.2.1 和 OpenCV 3.4.1 运行。
令我困惑的是,我有第二台 PC,安装了完全相同的 GCC 和 OpenCV,编译和链接成功。有没有人知道哪里可能存在差异,以便链接仅适用于后者?
解决方案
已解决:原因是我的第一台机器在其 /usr/local 树中包含过时版本的 OpenCV。删除之后,编译和链接就可以正常工作了。
推荐阅读
- java - Hive Regex 表现得很贪婪
- visual-studio-code - Whitelabel 错误页面 - 出现意外错误(类型=内部服务器错误,状态=500)
- firebase - 将图标变量或颜色变量保存到 Firebase 并使用它
- python - TensorFlow 2.0:无法在图形模式下训练具有自定义拟合的子类模型
- java - Spring Boot + Spring Batch + HSQLDB -> 为 JobRepository 配置 HSQLDB
- python - 无法使用 Selenium 单击项目 - Python
- tcpdf - HTML 字符串中的 TCPDF 嵌入式 Base64 编码图像
- azure-data-explorer - 异常创建账户的KQL查询
- git - Azure cli 存储库导入失败,操作返回 400 状态代码
- perl - 引号和斜线在多层中幸存