2010-09-28 8 views
6

Kiedy tworzę projekt xCode za pomocą szablonu "Command Line Tool" C++ stdC++, mogę dołączyć i skompilować nagłówki opencv i uruchomić trochę kodu.Jak dołączyć OpenCV do aplikacji kakao?

Ale chcę użyć OpenCV w kontekście "Zastosowanie kakao". Po utworzeniu z tym szablonem mam błędy kompilacji, gdy dołączam nagłówki OpenCV do main.mm. (Zmieniłem już main.m na main.mm, "// NSApplicationMain (argc, (const char **) argv)" zostało skomentowane)

Jednym z tych błędów jest: "Wyrażenia-wyrażenia są dozwolone tylko wewnątrz funkcji "

Przypuszczam, że jest to pewnego rodzaju błąd wersji kompilatora, ale kiedy porównać ustawienia kompilacji projektu nie mogę znaleźć różnice.

Czy masz jakieś pomysły/ekspertyzy?

Odpowiedz

1

Spróbuj dodać: -lstdc++ do "Inne flagi łączników" w ustawieniach kompilacji dla aplikacji Cocoa.

Aplikacja kakao stworzona przez szablony Xcode nie będzie zawierać domyślnie biblioteki C++ w jej ustawieniach.

+0

hi, ja również dodaje -lZ, ale wciąż mam ten sam błąd. Buduję na i386. Czego mi brakuje? – Fabian

+0

Dlaczego komentujesz NSApplicationMain()? Będziesz musiał zaktualizować swoje pytanie bardziej szczegółowymi informacjami, takimi jak dokładny komunikat o błędzie i/lub wystarczająca ilość fragmentu kodu, aby znaleźć wskazówki dotyczące problemu. – petert

0

Prawdopodobnie łatwiej będzie używać interfejsu API OpenCV C niż interfejsu API C++. Możesz wywoływać C API bezpośrednio z Celu C, więc to znacznie ułatwia życie. Tracisz tylko trochę syntaktycznego cukru C++, jak domyślne wartości parametrów.

18

Wpadłem na ten sam problem, spędziłem 2 dni na poważnym śledzeniu systemu i zgodnie z oczekiwaniami, rozwiązanie było tak proste, że 8-latek mógł znaleźć go szybciej niż ja.

Gotowy na to?

W pliku .mm, w którym chcesz używać OpenCV, musisz wykonać swój #include "opencv2/opencv.hpp" PRZED każdym innym programem. To jest to! Po prostu przesuń ją w górę i zobacz, jak twój problem w magiczny sposób znika szybciej niż dywan, który naprawdę łączy pomieszczenie.

To jest dla OpenCV 2.2 przy okazji, stąd nowy plik dołączania. Również jeśli twój projekt XCode używa pliku nagłówkowego prefiksu (patrz "Inne źródła" dla pliku "YourProjectName_Prefix.pch"), musisz umieścić tam swój #include "opencv2/opencv.hpp" zamiast w dowolnym innym pliku.

+1

Nawet jeśli nie ma aktualnego pliku Prefix.pch, ustawienia kompilacji celu mogą zawierać nagłówek prefiksu, taki jak UIKit.h systemu dla wszystkiego. Po usunięciu tego również w końcu zbudowałem na mojej maszynie. –

2

Nawet jeśli zmienisz nazwę "main.m" na "main.mm" i przeniesiesz "#include opencv2/opencv.hpp" na górę (w pliku głównym), preprocesor wstawi najpierw cocoa.h ze względu na prekompilowane pliki nagłówkowe, np. "_Prefix.pch". Aby uniknąć takich problemów, usuń instrukcję #import lub - wstaw instrukcję #import powyżej kakao.h instrukcja importu

3

Odpowiedź Iana Charnasa jest poprawna, ale jest jedna modyfikacja, którą chciałbym wprowadzić.

Ten artykuł zawiera bardziej szczegółowe rozwiązanie i wyjaśnienie, dlaczego trzeba to zrobić. http://aptogo.co.uk/2011/09/opencv-framework-for-ios/

// Dodaj nową sekcję przed zatwierdzeniem sprawozdania #import dla UIKit i Fundacji

#ifdef __cplusplus 
    #import <opencv2/opencv.hpp> 
#endif 
1
  1. dodać to do Twojego.PCH złożyć

    #ifdef __cplusplus 
    #import <opencv2/opencv.hpp> 
    #endif 
    
  2. nie zapomnij do konwersji wszystkich plików .m do plików .mm