【问题标题】:Qt (OSX) and OpenCV errorsQt (OSX) 和 OpenCV 错误
【发布时间】:2015-01-24 10:16:51
【问题描述】:

我一直在努力让 OpenCV 与 Qt 一起工作,但由于某种原因,它无法识别 OpenCV 库。我已经尝试了几乎所有关于 stackoverflow 的教程,但由于某种原因它不起作用。

我得到的错误信息是。

10:50:36: Running steps for project test...
10:50:36: Configuration unchanged, skipping qmake step.
10:50:36: Starting: "/usr/bin/make" 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -headerpad_max_install_names -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -mmacosx-version-min=10.7 -Wl,-rpath,/Users/me/Qt/5.4/clang_64/lib -o test.app/Contents/MacOS/test main.o mainwindow.o moc_mainwindow.o   -F/Users/me/Qt/5.4/clang_64/lib -L/usr/local/lib -framework QtWidgets -framework QtGui -framework QtCore -framework DiskArbitration -framework IOKit -framework OpenGL -framework AGL 
Undefined symbols for architecture x86_64:
  "cv::_InputArray::_InputArray(cv::Mat const&)", referenced from:
      MainWindow::MainWindow(QWidget*) in mainwindow.o
  "cv::Mat::deallocate()", referenced from:
      cv::Mat::release() in mainwindow.o
  "cv::imread(std::string const&, int)", referenced from:
      MainWindow::MainWindow(QWidget*) in mainwindow.o
  "cv::imshow(std::string const&, cv::_InputArray const&)", referenced from:
      MainWindow::MainWindow(QWidget*) in mainwindow.o
  "cv::fastFree(void*)", referenced from:
      cv::Mat::~Mat() 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: *** [test.app/Contents/MacOS/test] Error 1
10:50:37: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project test (kit: Desktop Qt 5.4.0 clang 64bit)
When executing step "Make"
10:50:37: Elapsed time: 00:00.

这是我的 .pro 文件

#-------------------------------------------------
#
# Project created by QtCreator 2015-01-23T19:58:31
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = test
TEMPLATE = app

INCLUDEPATH += /usr/local/include

HEADERS  += mainwindow.h

LIBS += -L/usr/local/lib
        -lopencv_core
        -lopencv_imgcodecs
        -lopencv_highgui
        -lopencv_imgproc

SOURCES += main.cpp\
        mainwindow.cpp


FORMS    += mainwindow.ui

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"
#include <QApplication>
#include <iostream>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    std::cout << "hello world - lalala" << std::endl;

    return a.exec();
}

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/opencv.hpp>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    cv::Mat inputImage = cv::imread("/users/horse.jpg");
    cv::imshow("test",inputImage);
}

MainWindow::~MainWindow()
{
    delete ui;
}

主窗口.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>797</width>
    <height>525</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <widget class="QPushButton" name="pushButton">
    <property name="geometry">
     <rect>
      <x>350</x>
      <y>330</y>
      <width>113</width>
      <height>32</height>
     </rect>
    </property>
    <property name="text">
     <string>done</string>
    </property>
   </widget>
   <widget class="QGraphicsView" name="input">
    <property name="geometry">
     <rect>
      <x>50</x>
      <y>70</y>
      <width>256</width>
      <height>192</height>
     </rect>
    </property>
   </widget>
   <widget class="QGraphicsView" name="output">
    <property name="geometry">
     <rect>
      <x>490</x>
      <y>70</y>
      <width>256</width>
      <height>192</height>
     </rect>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>797</width>
     <height>22</height>
    </rect>
   </property>
   <widget class="QMenu" name="menuOpenCV">
    <property name="title">
     <string>OpenCV</string>
    </property>
   </widget>
   <addaction name="menuOpenCV"/>
  </widget>
  <widget class="QToolBar" name="mainToolBar">
   <attribute name="toolBarArea">
    <enum>TopToolBarArea</enum>
   </attribute>
   <attribute name="toolBarBreak">
    <bool>false</bool>
   </attribute>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>

【问题讨论】:

    标签: c++ qt opencv compiler-errors linker


    【解决方案1】:

    我找到了解决问题的方法

    https://qt-project.org/forums/viewthread/35646

    我通过改变来解决这个问题

    /Users/ObiWang/Qt5.2.0/5.2.0-rc1/clang_64/mkspecs/macx-clang/qmake.conf

    从 QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6 到

    QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.9 那么就没有错误信息了。

    只有 10.9 工作(10.6、10.7 和 10.8 都失败了)

    【讨论】:

      【解决方案2】:

      我看到两个可能的问题:

      在 .pro 文件中:

      LIBS += -L/usr/local/lib
      

      --> 这个目录中有 openCV 库吗? (否则尝试使用另一个 -L 标志添加 openCV 库的目录)

      来自编译错误:

      ld: symbol(s) not found for architecture x86_64
      

      有没有可能,您拥有的是 32 位版本的库,而不是 64 位版本? (您可以使用 file 命令进行检查:例如 file opencv_core.so 。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-06
        • 1970-01-01
        • 2015-06-21
        • 1970-01-01
        • 1970-01-01
        • 2018-04-16
        • 2016-11-08
        相关资源
        最近更新 更多