You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 16环境下简单OpenCV C++程序编译运行出现大量错误的求助

解决Ubuntu 16下OpenCV C++编译大量错误的问题

嘿,作为OpenCV新手遇到这种一堆错误的情况确实头大,不过咱们从你的代码和配置里能找到几个典型的新手坑,一步步修正就能解决:

1. 先把混乱的CMakeLists.txt理清楚

你的CMake配置里重复写了cmake_minimum_required和project,版本要求前后不一致,项目名也重复定义,这会让CMake直接混乱。改成下面干净的版本:

cmake_minimum_required(VERSION 3.5)
project(openCVTest)

# 查找系统安装的OpenCV库
find_package(OpenCV REQUIRED)

# 打印OpenCV信息(可选,方便你确认是否找到正确的库)
message(STATUS "OpenCV版本: ${OpenCV_VERSION}")
message(STATUS "OpenCV头文件路径: ${OpenCV_INCLUDE_DIRS}")
message(STATUS "OpenCV链接库: ${OpenCV_LIBS}")

# 生成可执行文件
add_executable(openCVTest opencv.cpp)

# 把OpenCV库链接到你的程序上
target_link_libraries(openCVTest ${OpenCV_LIBS})

这里去掉了冗余的重复配置,CMake 2.8.11+(Ubuntu16的版本肯定满足)会自动处理OpenCV的头文件路径,不用手动加include_directories。

2. 修正C++代码的头文件冲突

你代码里同时包含了标准OpenCV头文件和一个绝对路径的/usr/local/include/opencv4/...,但你是用sudo apt install libopencv-dev装的库,头文件路径应该是/usr/include/opencv2/,不是/usr/local(那是源码编译安装的路径),不同路径的头文件混在一起会导致大量冲突错误。改成下面的代码:

#include <iostream>
#include <opencv2/opencv.hpp>  // 这一个头文件就够了,包含所有核心模块

using namespace std;
using namespace cv;

int main() {
    // 注意路径要确保正确,建议先确认图片存在
    Mat image = imread("/home/c++/edge detection/DisplayImage.JPG", IMREAD_COLOR);
    
    if (image.empty()) {  // 一定要加这个判断!避免空指针崩溃
        cout << "无法读取图片!检查路径是否正确" << endl;
        return -1;
    }
    
    imshow("DisplayImage", image);
    waitKey(0);  // 必须加这个,否则窗口会一闪而过直接关闭
    return 0;
}

这里做了几个优化:

  • 去掉冗余头文件,opencv2/opencv.hpp已经包含了imgcodecs、highgui等模块
  • 把硬编码的1换成可读性更高的IMREAD_COLOR
  • 添加图片读取失败的判断,这是新手最容易忽略的点
  • 加上waitKey(0),保证窗口能停留直到你按任意键

3. 检查32位/64位库的兼容性

从你pkg-config opencv --libs的输出看,库路径是/usr/lib/i386-linux-gnu/,这是32位的库。如果你的Ubuntu16是64位系统,就会出现编译链接不兼容的问题。先确认你的系统架构:

uname -m

如果输出是x86_64,说明是64位系统,安装64位的OpenCV库:

sudo apt install libopencv-dev:amd64

再运行pkg-config opencv --libs,应该会显示/usr/lib/x86_64-linux-gnu/开头的路径,这就对了。

4. 正确的编译运行步骤

改完上面的文件后,按下面的步骤操作(推荐用out-of-source编译,避免污染源码):

  • 新建编译目录并进入:
mkdir build && cd build
  • 用CMake生成Makefile:
cmake ..
  • 编译程序:
make
  • 运行程序:
./openCVTest

为什么会出现大量错误?

总结下来就是三个核心问题:

  • CMake配置重复定义导致逻辑混乱
  • 头文件路径冲突(同时混用apt安装和源码安装的路径)
  • 可能存在32位/64位库不兼容的情况

按照上面的步骤改完,应该就能正常编译运行了!

内容的提问来源于stack exchange,提问作者12081

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 08:57:38