2013-03-13 14 views
8

Mam projekt opencv, który rozwijam w ramach Ubuntu 12.04, na maszynie wirtualnej parellels na Macu, który ma architekturę x86_64. Było wiele problemów związanych z przełączaniem ekranów, które według mnie są spowodowane VM, gdzie tryby wideo w Linuksie zmieniają się na kilka sekund, podczas gdy dostęp do kamery jest dokonywany przez aplikację opencv. Postanowiłem przenieść projekt do Xcode po macowej stronie komputera, aby kontynuować rozwój opencv. Jednak nie jestem zaznajomiony z Xcode i mam problemy z prawidłowym budowaniem projektu.Kompilowanie opencv 2.4 na 64-bitowym Macu w Xcode

Mam zainstalowany kod xcode. Pobrałem i rozpakowałem najnowszą wersję opencv na Macu i uruchomiłem: ~/src/opencv/build/cmake-gui -G Xcode .. zgodnie z instrukcjami z willowgarage i różnych innych lokalizacji. Wyglądało na to, że działa dobrze (jednak zastanawiam się teraz, czy brakuje mi ustawienia architektury tutaj, mimo że jest to 64-bitowa intel w Xcode). Następnie ustawiłem projekt xcode z plikami źródłowymi z projektu linuksowego i zmieniłem katalogi włączników, aby używać/opt/local/include/... zamiast/usr/local/include/... Zmieniłem kod na użyj kompilatora LLVM GCC w ustawieniach kompilacji dla projektu następnie ustaw Apple LLVM Dialog dla C++ na Dialekt językowy na GNU ++ 11 (który wydaje się być prawdopodobnie niezgodny z powyższym wierszem)

Nie używam makefile w Xcode (mam świadomość, że ma własny plik projektu)

Wystąpił również problem z linkerem, który wyglądał, jakby mógł zostać rozwiązany przez dodanie tej flagi linkera:

-lopencv_video 

na podstawie podobnego ogłoszenia tutaj: other thread Jednak w tym przypadku osoba używała pliku Makefile w swoim projekcie.

Próbowałem dodać tę flagę linkera pod "Inne flagi Linker" w ustawieniach kompilacji xcode, ale nadal dostaję błędy kompilacji.
Myślę, że mogę mieć dwa problemy tutaj, jeden z ustawieniami architektury podczas budowania bibliotek opencv z Cmake i jeden z ustawieniami flagi linkera w moim projekcie.

Obecnie lista błędów build wygląda tak:

Undefined symbols for architecture x86_64: 
    "cv::_InputArray::_InputArray(cv::Mat const&)", referenced from: 
    _main in main.o 
    "cv::_OutputArray::_OutputArray(cv::Mat&)", referenced from: 
    _main in main.o 
    "cv::Mat::deallocate()", referenced from: 
    cv::Mat::release() in main.o 
    "cv::Mat::copySize(cv::Mat const&)", referenced from: 
    cv::Mat::Mat(cv::Mat const&)in main.o 
    cv::Mat::operator=(cv::Mat const&)in main.o 
    "cv::Mat::Mat(_IplImage const*, bool)", referenced from: 
    _main in main.o 
    "cv::imread(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)", referenced from: 
    _main in main.o 
    ---SNIP--- 
    ld: symbol(s) not found for architecture x86_64 
    collect2: ld returned 1 exit status 

Może ktoś podać kilka wskazówek na co próbować dalej?

Dzięki, Walt

Odpowiedz

15

kroki, aby skompilować i uruchomić C++ 2.4.4 OpenCV na Mac OS X Lion 10.7.5 z cmake 2.8.10 i Xcode 4.6.1 EDIT: powodzeniem przetestowane z OpenCV 2.4.5 mac OS x 10.8.3 i górskiego lwa Xcode 4.5

posiadanie odpowiedniego narzędzia

  1. pobrania OpenCV unix z http://sourceforge.net/projects/opencvlibrary/files/ i rozpakować go gdziekolwiek
  2. pobieranie CUpewnij Dmg z http://www.cmake.org/cmake/resources/software.html i zainstalować go
  3. jestem zakładając, że masz Xcode 4.6 OS X Lion, który zawiera iOS SDK 6.1
  4. przejść do preferencji Xcode, aby pobrać i zainstalować Narzędzia wiersza polecenia masz g ++ itp.

użycie cmake skompilować OpenCV

  1. iść do wydobytego folderze OpenCV
  2. utworzyć katalog build

    mkdir build 
    cd build 
    cmake -D WITH_TBB=OFF -D BUILD_NEW_PYTHON_SUPPORT=OFF -D BUILD_FAT_JAVA_LIB=OFF -D BUILD_TBB=OFF -D BUILD_EXAMPLES=ON -D CMAKE_CXX_COMPILER=g++ CMAKE_CC_COMPILER=gcc -D CMAKE_OSX_ARCHITECTURES=x86_64 -D BUILD_opencv_java=OFF -G "Unix Makefiles" .. 
    make -j8 
    sudo make install 
    
  3. z folderu kompilacji, przejdź do kosza/i uruchom jeden z testów

    ./opencv-test-photo 
    

Tworzenie własnego projektu C++ OpenCV Xcode

  1. odpalić Xcode i utworzyć nowy projekt Xcode
  2. wybierz narzędzie wiersza polecenia dla danego rodzaju projektu pod os x
  3. otwórz ustawienia kompilacji projektu
  4. w obszarze Architektury, ustaw architekturę na 64-bitową intel. również ustawić poprawnych architektur x86_64
  5. ramach Opcji budować, ustawić kompilator C/C++, aby domyślny kompilator
  6. pod ścieżek wyszukiwania, ustaw Header ścieżek wyszukiwania do/usr/local/include
  7. również pod ścieżek wyszukiwania, ustaw Library Ścieżki wyszukiwania do/usr/local/lib
  8. pod kompilatorem Apple LLVM 4.2 - Zestaw językowy C++ Standard Library do libstd ++ (Z OpenCV 2.4.6, Xcode 5, LLVM 5.0 i 10.8.5, ustaw oba dialekty językowe i std library zamiast "Domyślny kompilator")

Dodaj zebrane biblioteki OpenCV do projektu

  1. iść kartę Fazy Buduj obok Budowanie kartę Ustawienia byłaś w
  2. wewnątrz Łącze binarnych z biblioteki, kliknij znak + i wybierz Dodaj Inny
  3. uderzony z przodu slash/na klawiaturze i wpisz/usr/local/lib
  4. przebojem wejść i wybrać bibliotek, których chcesz użyć w swoim projekcie
  5. upewnij się, że zawsze wybierać libopencv_core.2.4.4.dylib
  6. hit pl ter a zobaczysz wybrane dylibs ramach projektu

napisać kod

  1. pierwszy pozwala organizować pliki, kliknij prawym przyciskiem na blueprint ikonę projektu i wybrać nową grupę
  2. nazwa nowa grupa opencv lub cokolwiek innego:
  3. przeciągnij dylibs i upuść je w tej grupie
  4. otwórz główną.CPP
  5. kopia kodu z jednego z testów próbek dostarczonych z OpenCV i wklej go tutaj
  6. sprawdzić, czy wszystkie wymagane dylibs dodawane są, na przykład, jeśli kopiowany kod opencv_test_stitching.cpp do main.cpp, ty trzeba będzie dodać następujące biblioteki w poprzednich krokach

    • libopencv_core.2.4.4.dylib
    • libopencv_highgui.2.4.4.dylib
    • libopencv_stitching.2.4.4.dylib

Pozdrawiam.

+0

Dziękuję verymuch ... to rozwiązało mój problem. Problem polegał na tym, że "C++ Std Library" .By domyślnie było to "libC++". Zmiana na "libstdC++" zrobiła lewę. Thankyou verymuch raz jeszcze – tez

+0

Świetny tutorial dostał mnie dalej niż większość innych. Czy zmieniła się ta zmiana z Xcode 5 i OpenCV 2.4.6.1? Podczas instalacji sudo dostaję błędy, ale postaram się je wyśledzić na własną rękę. Dzięki! –

+0

Zgodnie z tym komentarzem (http://stackoverflow.com/questions/14030546/linker-errors-after-upgrading-xcode-to-4-5-2-and-opencv-to-2-4-3/15662948# comment28843244_15662948), tak, są zmiany. "W OpenCV 2.4.6, Xcode 5, LLVM 5.0 i 10.8.5 musiałem ustawić zarówno dialekt językowy, jak i std library (krok 8) na" Compiler Default ". W przeciwnym razie zobaczyłbym błędy linkera (narzekałem na imwrite w szczególności) lub brakuje . " Zaktualizowałem odpowiedź. Mam nadzieję, że to działa dla ciebie. – moubarak