将 QT 配置为书"opencv2 computer vision application programming cookbook"中的代码



我正在使用QT creator 3.2.1/QT 5.3.2(clang5.0(苹果))自学"opencv2计算机视觉应用程序编程食谱"一书。当我尝试构建一个程序时,我收到如下警告:

Undefined symbols for architecture x86_64:
  "cv::imread(std::string const&, int)", referenced from:
      MainWindow::on_pushButton_clicked() in mainwindow.o
      ColorDetectController::setInputImage(std::string) in mainwindow.o
  "cv::imshow(std::string const&, cv::_InputArray const&)", referenced from:
      MainWindow::on_pushButton_clicked() in mainwindow.o
      MainWindow::on_pushButton_2_clicked() in mainwindow.o
  "std::allocator<char>::allocator()", referenced from:
      MainWindow::on_pushButton_clicked() in mainwindow.o
      MainWindow::on_pushButton_2_clicked() in mainwindow.o
  "std::allocator<char>::~allocator()", referenced from:
      MainWindow::on_pushButton_clicked() in mainwindow.o
      MainWindow::on_pushButton_2_clicked() in mainwindow.o
  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)", referenced from:
      MainWindow::on_pushButton_clicked() in mainwindow.o
      MainWindow::on_pushButton_2_clicked() in mainwindow.o
  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()", referenced from:
      MainWindow::on_pushButton_clicked() in mainwindow.o
      MainWindow::on_pushButton_2_clicked() in mainwindow.o
ld: symbol(s) not found for architecture x86_64
**clang: error: linker command failed with exit code 1** (use -v to see invocation)
make: *** [controller.app/Contents/MacOS/controller] Error 1
14:49:33: **The process "/usr/bin/make" exited with code 2**.
Error while building/deploying project controller (kit: Desktop Qt 5.3 clang 64bit)
When executing step "Make"

这是我的 .pro 文件:

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = controller
TEMPLATE = app

SOURCES += main.cpp
           mainwindow.cpp 
           ../colorDetection/colorDetector.cpp 
           colorDetectController.cpp
HEADERS  += mainwindow.h 
            ../colorDetection/colorDetector.h 
            colorDetectController.h
FORMS    += mainwindow.ui
CONFIG += c++11
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.10

INCLUDEPATH += "/usr/local/opt/opencv/include" 
LIBS += -L"/usr/local/opt/opencv/lib" 
        -lopencv_core 
        -lopencv_highgui 
        -lopencv_imgproc

我以前遇到过类似的警告,但我通过将这两行添加到 .pro 文件中来解决这个问题:

CONFIG += c++11
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.10

但是,这次它不起作用。谁能向我解释如何解决这个问题?多谢。

这不是警告,而是错误。链接器错误。特别是,线

"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)", referenced from:

意味着它甚至无法链接标准的 std::string,这很奇怪。

它找不到适用于 x64 体系结构的库。我在您的配置中没有看到为此架构编译的开关,因此我假设这是一种默认行为,这反过来意味着编译器应该附带一个相应的库(至少带有 std::string)。

这让我想到了这个问题(尽管它是针对 gcc 的),问题在于 libstdc++ 太旧了,因此它不包含 C++11 标准的一些定义。

然后我查看了带有 std::basic_string 描述的页面,发现由于成员中的 c++11 被std::allocator使用,这就是我在关于字符串的未定义引用的大括号内看到的。

因此,您的c ++库太旧的问题。您需要更新编译器。我从你的帖子中注意到的另一件有趣的事情是:你可能说了一个错误的叮当声版本。你说它是clang-5.0,所以我在我的 Kubuntu 中查看了版本,它只是3.4.我想知道:我这么久没有更新系统吗?然后我决定偷看 clang 网站,发现最新版本(写成"正在进行中")只是3.7

我需要提到的最后一件事是开头的两个未定义的引用 — 您只需要添加一个包含函数 cv::imreadcv::imshow 的库的路径。

相关内容

  • 没有找到相关文章

最新更新