J'ai un problème de liaison entre OpenCV dans Xcode . J'ai installé OpenCV avec Brew:
brew tap homebrew/science
Sudo brew install opencv
J'ai lancé un nouveau projet de ligne de commande Xcode, ajouté /usr/local/lib
et /usr/local/include
au chemin de recherche de la bibliothèque et de l'en-tête . J'ai également ajouté le résultat de pkg-config --libs opencv
à other linker options
.
Mais quand j'essaye de compiler ce petit exemple de programme:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
int main(int argc, char *argv[])
{
cv::Mat test;
cv::namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
cv::waitKey(0); // Wait for a keystroke in the window
return 0;
}
je reçois l'erreur de l'éditeur de liens suivante:
Undefined symbols for architecture x86_64:
"cv::namedWindow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
Mais je suis capable de compiler le programme sur la ligne de commande en utilisant
g++ `pkg-config --cflags --libs opencv` prog.cpp
Je pense donc que le problème réside dans la configuration de Xcode. Mais je ne suis pas en mesure de déterminer la différence entre la manière dont Xcode est compilé et mon argument en ligne de commande.
Est-ce que quelqu'un connait la raison de cette erreur ou a une idée de ce que je pourrais essayer d'étudier le problème?
Dans Xcode, créez un nouveau groupe dans votre projet, cliquez dessus avec le bouton droit de la souris, choisissez Ajouter des fichiers à Projet, naviguez jusqu'au dossier /usr/local/lib
et ajoutez les bibliothèques de base suivantes:
libopencv_core.dylib, libopencv_ml.dylib, libopencv_video.dylib
Dans les versions précédentes d'OpenCV, les noms de bibliothèque pourraient être:
libcxcore.dylib, libcvaux.dylib, libcv.dylib, libhighgui.dylib, libml.dylib
(Les bibliothèques peuvent être dans un autre chemin en fonction de la méthode utilisée pour installer OpenCV sur votre Mac.)
Modifier:
Les lignes ci-dessus ne devraient pas être nécessaires si vous incluez les bibliothèques dynamiques dans la phase de liaison, comme l'explique le PO.
Sélectionnez votre projet, allez dans Paramètres de construction onglet, filtrez par bibliothèque standard c ++ et définissez ce paramètre sur libstdc ++ (bibliothèque standard GNU C++) .
J'ai défini les paramètres de construction -> bibliothèque standard c ++ sur Compiler Default . Les erreurs ont disparu.
J'ai dû ajouter les bibliothèques suivantes (phases de construction -> lien binaire avec bibliothèques) pour qu'OpenCV construise:
Pour moi, j'utilise opencv dans xcode pour iOS et je résous les erreurs en utilisant opencv via pod install plutôt que via un framework opencv hors ligne.
Vous pouvez essayer en ajoutant le texte ci-dessous:
pod 'OpenCV', '2.4.9'