2013-07-08 9 views
6

Próbuję skonfigurować OpenCV do pracy z QT w systemie Intel Core 2 Duo OSX 10.7.5/MacbookPro 2,5 Ghz. Widziałem tutaj kilka powiązanych pytań (How to link opencv in QtCreator and use Qt library i How do you set up OpenCV with QT in OSX?), ale nie ma zbyt wiele szczegółów. Na stronie QT oraz w moich przeszukiwaniach internetowych wszystkie informacje wydają się dotyczyć systemu Windows lub Linux.Konfigurowanie OpenCV w QT na OSX


Podałem listę ustawień i kod poniżej. Po uruchomieniu kodu otrzymuję komunikat o błędzie: :-1: error: symbol(s) not found for architecture x86_64

Czy to oznacza, że ​​nie znajduje rzeczy, ponieważ ścieżki są złe lub dlatego, że mogłem zbudować openCV dla x86_32? Czy istnieje sposób sprawdzenia tego ostatniego? Nie jestem tak bystry z częściami procesu konfiguracji i konfiguracji.


Aktualizacja 2

Wyjście konsola jest poniżej - być może błąd jest oczywiste?

02:44:38: Running steps for project RP_openCV_01... 
02:44:38: Configuration unchanged, skipping qmake step. 
02:44:38: Starting: "/usr/bin/make" 
clang++ -headerpad_max_install_names -mmacosx-version-min=10.6 -o RP_openCV_01 main.o -L/usr/local/lib -1ibopencv_core.2.4.6,dylib -1ibopencv_imgproc.2.4.6.dylib -F/Users/rise/Qt5.0.2/5.0.2/clang_64/lib -framework QtCore 
clang: warning: argument unused during compilation: '-1ibopencv_core.2.4.6,dylib' 
clang: warning: argument unused during compilation: '-1ibopencv_imgproc.2.4.6.dylib' 
Undefined symbols for architecture x86_64: 
    "cv::_InputArray::_InputArray(cv::Mat const&)", referenced from: 
     _main in main.o 
    "cv::namedWindow(std::string const&, int)", referenced from: 
     _main in main.o 
    "cv::Mat::deallocate()", referenced from: 
     _main in main.o 
    "cv::imread(std::string const&, int)", referenced from: 
     _main in main.o 
    "cv::imshow(std::string const&, cv::_InputArray const&)", referenced from: 
     _main in main.o 
    "cv::waitKey(int)", referenced from: 
     _main in main.o 
    "cv::fastFree(void*)", referenced from: 
     _main in main.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: *** [RP_openCV_01] Error 1 
02:44:38: The process "/usr/bin/make" exited with code 2. 
Error while building/deploying project RP_openCV_01 (kit: Desktop Qt 5.0.2 clang 64bit) 
When executing step 'Make' 

Co mam tak daleko (TL; DR):

  • zbudowany i zainstalowany w najnowszej wersji (2.4.6) OpenCV ze źródeł i przetestowane z niektóre programy wiersza poleceń.

  • zainstalowaną najnowszą wersję QT (5.1) i jestem w stanie uruchomić wszystkie przykłady itp

  • określone ścieżki w pliku projektu (poniżej)

QT  += core 
QT  -= gui 

TARGET = RP_openCV_01 
CONFIG += console 
CONFIG -= app_bundle 

TEMPLATE = app 
SOURCES += main.cpp 

INCLUDEPATH += /usr/local/include\ 
LIBS += -L/usr/local/lib 
  • próbował określić ścieżkę w ustawieniach projektu (poniżej). Dodałem /usr/local/include i /usr/local/lib

enter image description here

Prosty przykład kodu w main.cpp

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 

int main() { 

    // read an image 
    cv::Mat image= cv::imread("dog.jpg"); 
    // create image window named "My Image" 
    cv::namedWindow("My Image"); 
    // show the image on window 
    cv::imshow("My Image", image); 
    // wait key for 5000 ms 
    cv::waitKey(5000); 

    return 1; 
} 

Update 1

Inną rzeczą Próbowałem na podstawie samouczka było określenie bibliotek i n profilu QT (jak na zdjęciu poniżej). Samouczek dotyczył Windowsa i nie wiedziałem, czy i jak OSX jest inny. Gdzie w przykładzie Windowsa jest -1ibopencv_core246d próbowałem go zi bez okresów separacji, ale bez "d". Oczywiście pełna nazwa lib to "libopencv_core.2.4.6.dylib" itd.

Tego rodzaju ważne szczegóły zawsze mnie podniecają, ale często zakłada się w tutorialach, że zna się na tym.

LIBS += -L/usr/local/lib \ 
    -1ibopencv_core.2.4.6 \ 
    -1ibopencv_imgproc.2.4.6 \ 
    -1ibopencv_features2d.2.4.6 \ 
    -1ibopencv_highgui.2.4.6 

enter image description here

+0

Domyślnie OpenCV 2.4.6 jest zbudowany dla rodzimej architektury (powinno to być x86_64). Kiedy mówisz "uruchom", w jaki sposób dokładnie uruchamiasz swój kod? Może to być związane z tym, że DYLD_LIBRARY__PATH nie zawiera ścieżki do plików .disc. – sansuiso

+0

@sansuiso - Używam QTCreatora do zbudowania i uruchomienia tego. Dodałem aktualizację do mojego pytania, aby wyjaśnić, w jaki sposób próbowałem określić biblioteki, które należy uwzględnić. –

+0

Kiedyś pracował dla mnie na 10.8 przy użyciu [tego pliku .pro] (https://gist.github.com/bestimmaa/7033447), ale od momentu skonfigurowania nowej maszyny dev z 10.9 pojawia się ten sam błąd. – Christoph

Odpowiedz

6

Tylko naiwny błąd

Właściwa deklaracja:

LIBS += -L/usr/local/lib \ 
    -lopencv_core \ 
    -lopencv_imgproc \ 
    -lopencv_features2d\ 
    -lopencv_highgui 
+0

Thx! Działa na osxie 10.7.5 Lion z QT 5.2 –

0

pomyślnie zainstalowany zarówno OpenCV, QT oraz PyQt przez MacPorts.

+0

Jakie ustawienie używasz w QT, aby łączył się z bibliotekami openCV? –

+0

Czy próbki opencv działają? Jak określiłeś biblioteki opencv? Musisz uwzględnić te ścieżki w Qt. – wrdeman

0

stoją 2 potencjalne problemy tutaj:

  1. Pierwszy z nich to, na platformach Mac zależności od kompilatora (dzyń lub GCC) nie połączy przeciwko samo STDC++ biblioteki (I wpadł na ten problem, próbując uzyskać statyczną bibliotekę opencv pracującą z projektem iOS). Jednak nie wydaje się, aby tak było w tym przypadku, ponieważ nie masz błędów w C++, ale warto sprawdzić, jakiego kompilatora używasz w każdym przypadku;
  2. Drugi, QtCreator jest aplikacją graficzną . W związku z tym nie ma informacji o ustawieniach sesji terminalowej. Obejmuje to ścieżkę do bibliotek dynamicznych pod numerem /usr/local. Możesz tego uniknąć różnymi metodami: używając statycznej biblioteki opencv, używając install_tool, aby zmienić ścieżkę do biblioteki zakodowanej w wyjściowym pliku binarnym, lub używając preferencji QtCreator, aby ustawić zmienną DYLD_LIBRARY_PATH na coś podobnego do /usr/local/lib podczas uruchamiania twojego programu .
1

Właśnie natknąłem się na ten sam problem. Oto, jak to rozwiązałem:

Jak już zasugerowałeś sansuiso, problem wydaje się być C++ - STD-lib, z którym próbujesz się połączyć. Prawdopodobnie próbujesz połączyć libC++ (LLVM ...), ale zamiast tego należy użyć libstdC++ (GNU C++ ...).

Korzystanie z Qt Creator można dodać następujące wpisy do akt .pro:

mac: CONFIG += MAC_CONFIG 

MAC_CONFIG { 
    QMAKE_CXXFLAGS = -std=c++11 -stdlib=libstdc++ -mmacosx-version-min=10.7 
    QMAKE_LFLAGS = -std=c++11 -stdlib=libstdc++ -mmacosx-version-min=10.7 
} 

Ta odpowiedź może być również interesująca dla swojego problemu: https://stackoverflow.com/a/12852913/1141118

nadzieję, że to pomaga!

+0

Dzięki. Zbudowałem openCV osobno i udało mi się go połączyć z tylko definicjami w mojej odpowiedzi poniżej. –

+0

'CONFIG + = C++ 11' wydaje się wystarczające. – CroCo

Powiązane problemy