2010-09-28 13 views
6

'Komut Satırı Aracı' C++ stdC++ şablonuna sahip bir xCode projesi oluşturduğumda, opencv başlıklarını ekleyebilir ve derleyebilir ve bazı kodları çalıştırabilirim.Kakao Uygulamada OpenCV nasıl eklenir?

Ama bir 'Kakao Uygulaması' bağlamında OpenCV kullanmak istiyorum. Bu şablonla oluşturulduğunda, OpenCV başlıklarını main.mm dosyasına eklediğimde derleme hatalarım var. (Main.m 'yi main.mm olarak değiştirdim,' // NSApplicationMain (argc, (const char **) argv); 'yorumlandı)

Bu hatalardan biri: "Deyim ifadelerine izin verilir yalnızca içerdeki işlevler "

Bir çeşit derleyici sürüm hatası varsayalım, ancak proje oluşturma ayarlarını karşılaştırdığımda farklılıkları bulamıyorum.

Fikriniz/uzmanlığınız var mı?

cevap

1

Kakao uygulamanızın derleme ayarlarındaki "Diğer bağlayıcı bayraklarına" eklemeye çalışın: -lstdc++.

Xcode şablonları tarafından yapılan bir kakao uygulaması, varsayılan olarak ayarlarında C++ kitaplığını dahil etmeyecektir.

+0

hi içine .m tüm dosyaları dönüştürmek için unutma dosyasını ben de -lz eklendi, ancak hala aynı hata var. Ben i386 üzerinde yapıyorum. Neyi kaçırıyorum? – Fabian

+0

NSApplicationMain() neden yorum yapıyorsunuz? Sorunuzu, kesin hata mesajı ve/veya sorunla ilgili ipuçları için kod snippet'i gibi daha spesifik bilgilerle güncellemeniz gerekir. – petert

0

Muhtemelen C++ API yerine OpenCV'nin C API'sini kullanmayı daha kolay bulacaksınız. C API'lerini doğrudan Objective C'den de arayabilirsiniz, bu sayede hayat çok daha kolaylaşır. Sadece C++ 'nın sözdizimsel şekerini, varsayılan parametre değerleri gibi kaybedersiniz.

18

Aynı problemle karşılaştım, 2 gün ciddi bir sistem takibi yaptım ve beklediğim gibi, çözüm 8 yaşındaki bir kişinin bunu benden daha çabuk bulduğu kadar kolaydı.

Bunun için hazır mısınız?

OpenCV'yi kullanmak istediğiniz .mm dosyasında, #include "opencv2/opencv.hpp" ürününü diğer içeriklerden ÖNCE yapmalısınız. Bu kadar! Sadece bir çizgi yukarı taşıyın ve probleminizi sihirli bir şekilde odayı gerçekten birbirine bağlayan halıdan daha hızlı gözden kaçırmayın.

Bu, OpenCV 2.2 içindir, dolayısıyla yeni dahil dosyasıdır. Ayrıca, XCode projeniz bir önek üstbilgi dosyası kullanıyorsa ("YourProjectName_Prefix.pch" dosyası için "Diğer Kaynaklar" bölümüne bakın), başka herhangi bir dosya yerine #include "opencv2/opencv.hpp"'u buraya koymanız gerekecektir.

+1

Gerçek bir Prefix.pch olmasa bile, hedefin kurulum ayarları, Sistem'in UIKit.h'si gibi her şey için bir önek başlığı içerebilir. Bunu da kaldırdıktan sonra makinem üzerine inşa ettim. –

2

"main.m" öğenizi "main.mm" olarak yeniden adlandırıp "#include opencv2/opencv.hpp" yi (ana dosyada) üst üste getirseniz bile, önişlemci önce kakao.h Önceden derlenmiş başlık dosyaları nedeniyle "_Prefix.pch" gibi bir şey nemlendi. Bu tür sorunları önlemek için - alma deyimi veya silmek - cocoa.h ithalat beyanı üzerinde bir alma deyimi eklemek

3

Ian Charnas en Cevap doğru, ancak ben yapacak bir modifikasyon yoktur.

Bu makalede, daha özel bir çözüm ve bunu neden yapmanız gerektiğine ilişkin bir açıklama vardır. http://aptogo.co.uk/2011/09/opencv-framework-for-ios/

// adresinden Müşteri bu eklemek UIKit ve Vakfı

#ifdef __cplusplus 
    #import <opencv2/opencv.hpp> 
#endif 
1
  1. için alma ifadeleri ÖNCE bu yeni bölüm ekle.pch,

    #ifdef __cplusplus 
    #import <opencv2/opencv.hpp> 
    #endif 
    
  2. , mm dosyaları