2015-01-24 3 views
1

저는 OpenCV를 Qt에서 사용하는 데 어려움을 겪었습니다. 그러나 어떤 이유로 OpenCV 라이브러리를 인식 할 수 없습니다. stackoverflow에 대한 거의 모든 자습서를 이미 시도했지만 어떤 이유로 작동하지 않습니다.Qt (OSX) 및 OpenCV 오류

내가 얻는 오류 메시지는 다음과 같습니다.

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. 

#------------------------------------------------- 
# 
# 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 

mainwindow.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(); 
} 

mainwindow.cpp

,369 내 .PRO 파일입니다
#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("https://stackoverflow.com/users/horse.jpg"); 
    cv::imshow("test",inputImage); 
} 

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

mainwindow.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> 

답변

0

:

.PRO 파일에서을 :

LIBS += -L/usr/local/lib 

->이 디렉토리 내에서 OpenCV의 libs와이 있습니까? 라이브러리의 32 비트 버전을 가지고,

ld: symbol(s) not found for architecture x86_64 

이 될 수 대신 : 컴파일 오류에서

을 (그렇지 않으면 다른 -L 플래그와 OpenCV의 libs와의 디렉토리를 추가하려고) 64 비트 버전? (파일 명령을 사용하여 확인할 수 있습니다. 예를 들어, 파일 opencv_core.so을)

+0

내 문제에 해결책을 발견하고 그들은 64 비트입니다 .. 그래서 그럴 수는 없어 .. – OpenCV

1

나는 버전으로 확인

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

I solve this by change

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

from QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6 to

QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.9 Then there is no error message.

only 10.9 works (10.6, 10.7, and 10.8 all failed)