【问题标题】:OpenCV 3.0 undefined reference error?OpenCV 3.0 未定义的参考错误?
【发布时间】:2014-11-10 16:04:56
【问题描述】:

我刚刚按照说明在我的 ubuntu 计算机上安装了 opencv 3(我已经在不同的 linux 设备上安装并运行了使用 opencv 3 的程序),但是,当我尝试运行我的一个测试程序时我的旧电脑出现以下错误:

CMakeFiles/VideoTest.dir/VideoTest.cpp.o: In function `main':
VideoTest.cpp:(.text+0x6f): undefined reference to `cv::VideoWriter::fourcc(char,char,char, char)'
VideoTest.cpp:(.text+0xc3): undefined reference to `cv::VideoWriter::open(cv::String const&, int, double, cv::Size_<int>, bool)'
VideoTest.cpp:(.text+0x103): undefined reference to `cv::namedWindow(cv::String const&, int)'
VideoTest.cpp:(.text+0x146): undefined reference to `cv::VideoCapture::read(cv::_OutputArray const&)'
VideoTest.cpp:(.text+0x1b1): undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
CMakeFiles/VideoTest.dir/VideoTest.cpp.o: In function `cv::String::String(char const*)':
VideoTest.cpp:(.text._ZN2cv6StringC2EPKc[_ZN2cv6StringC5EPKc]+0x3b): undefined reference to `cv::String::allocate(unsigned int)'
CMakeFiles/VideoTest.dir/VideoTest.cpp.o: In function `cv::String::~String()':
VideoTest.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0xd): undefined reference to `cv::String::deallocate()'
collect2: ld returned 1 exit status
make[2]: *** [VideoTest] Error 1
make[1]: *** [CMakeFiles/VideoTest.dir/all] Error 2
make: *** [all] Error 2

知道发生了什么吗?我对opencv比较陌生。这是我的测试代码供参考:

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/opencv.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char* argv[]){
    VideoCapture vCap(0);
    VideoWriter vWrite;
    vWrite.open("test.avi", vWrite.fourcc('M','J','P','G'), 20, Size(640, 480), true);
    while (1) {
        namedWindow("VideoFeed", WINDOW_AUTOSIZE);
        Mat frame;
        vCap.read(frame);
        vWrite.write(frame);
        imshow("VideoFeed", frame);
        char c = waitKey(50);
        if (c == 27) {
            break;
        }
    }
    return 0;
}

提前致谢。

编辑:我的 CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)
project(VideoTest)
find_package(OpenCV REQUIRED)
add_executable(VideoTest VideoTest.cpp)
target_link_libraries(VideoTest ${OpenCV_LIBS})

【问题讨论】:

标签: c++ opencv ubuntu cmake


【解决方案1】:

VideoCapture 和 VideoWriter 在 3.0 中被移到了 videoio 模块,所以你必须另外

#include "opencv2/videoio.hpp"

另外,您似乎没有链接到任何必需的 opencv 库,它们是:

opencv_core, opencv_videoio, opencv_highgui

【讨论】:

  • 我不确定链接到所需的 opencv 库是什么意思。你能告诉我具体怎么做吗?
  • 您没有告诉我们您的操作系统,使用的编译器,而且您似乎使用cmake来生成东西,所以请将cmakelists.txt添加到您的问题中,然后让我们重新迭代
  • 我的操作系统版本是 Ubuntu 12.04.5 LTS,我使用的是 cmake 2.8.7 和 gcc 4.6.3。将我的 CMakeLists.txt 添加到我的问题中。
  • 抱歉,没有看到标签。不幸的是,没有真正的想法,现在失败了,你的 cmake 文件对我来说看起来还不错。
  • 您仍然可以退回到(手动)g++ VideoTest.cpp -lopencv_core -lopencv_videoio -lopencv_highgui -o VideoTest
【解决方案2】:

好吧,我终于弄清楚发生了什么。当我将目录移到我的新系统时,CMakeFiles 文件夹内部的某些东西出现了问题。删除项目 .cpp 文件和 CMakeLists.txt 文件之外的所有文件/目录,并运行“cmake”。再次“make”似乎可以解决问题。

【讨论】:

    【解决方案3】:

    下面的 cmake 文件对我有用。

    cmake_minimum_required(VERSION 3.5)
    project(ImageProcessing)
    
    set(CMAKE_CXX_STANDARD 14)
    find_package(OpenCV REQUIRED)
    include_directories( ${OpenCV_INCLUDE_DIRS} )
    set(SOURCE_FILES main.cpp)
    add_executable(ImageProcessing ${SOURCE_FILES})
    target_link_libraries( ImageProcessing ${OpenCV_LIBS} )
    # Print some message showing some of them
    message(STATUS "OpenCV library status:")
    message(STATUS "    version: ${OpenCV_VERSION}")
    message(STATUS "    libraries: ${OpenCV_LIBS}")
    message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")
    

    【讨论】:

      猜你喜欢
      • 2015-01-14
      • 2019-10-25
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多