使用gcc 5.1

时间:2015-05-05 22:56:59

标签: c++ macos opencv gcc

我有一个非常基本的程序来测试OpenCV的工作原理。

#include <opencv2/opencv.hpp>

int main() {
    cv::namedWindow("Window", CV_WINDOW_AUTOSIZE);

    cv::VideoCapture video_capture;
    video_capture.open(0);

    while (true) {
        cv::Mat image;
        video_capture.read(image);

        cv::imshow("Window", image);

        if (cv::waitKey(1) == 27) {
            break;
        }
    }

    return 0;
}

找到OpenCV的CMakeLists.txt文件如下:

find_package(OpenCV REQUIRED)
...
target_link_libraries(Project ${OpenCV_LIBS})

这适用于使用OpenCV 2.4.10和clang 602.0.49的Mac OSX 10.10,但如果我尝试通过将set(CMAKE_CXX_COMPILER /usr/gcc-5.1.0/bin/g++-5.1.0)放入我的CMakeLists.txt来使用gcc 5.1,则会出现以下错误:

Undefined symbols for architecture x86_64:
  "cv::namedWindow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)", referenced from:
      _main in main.cpp.o
  "cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)", referenced from:
      _main in main.cpp.o

问题是什么?如何解决?

1 个答案:

答案 0 :(得分:0)

请使用您用于编译上述代码的相同版本的gcc重新编译OpenCV。这个问题应该有希望消失。来自官方的gcc页面,

  

如果您收到有关涉及std :: __ cxx11命名空间中的类型或标签[abi:cxx11]的符号的未定义引用的链接器错误,那么它可能表示您正在尝试将使用不同值编译的目标文件链接在一起对于_GLIBCXX_USE_CXX11_ABI宏。当链接到使用旧版GCC编译的第三方库时,通常会发生这种情况。如果无法使用新的ABI重建第三方库,则需要使用旧的ABI重新编译代码。