web-dev-qa-db-fra.com

Symboles non définis pour une erreur d'architecture x86_64 lors de la liaison de OpenCV à Xcode

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?

13
sietschie

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++) .

27
Daniel Martín

J'ai défini les paramètres de construction -> bibliothèque standard c ++ sur Compiler Default . Les erreurs ont disparu.

7
Galina Baytman

J'ai dû ajouter les bibliothèques suivantes (phases de construction -> lien binaire avec bibliothèques) pour qu'OpenCV construise:

  • Accélérer 
  • AssetsLibrary
  • AVFoundation
  • CoreGraphics
  • CoreImage
  • CoreMedia
  • CoreVideo
  • QuartzCore
  • UIKit
  • Fondation

Réf: http://docs.opencv.org/doc/tutorials/ios/video_processing/video_processing.html#opencviosvideoprocessing

1
cloudsurfin

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'
0
Chuyang