2009-04-26 4 views
2

J'essaie d'entrer dans la programmation C++, et je me bats contre les petits détails. En ce moment, j'essaie de faire fonctionner l'extrait ci-dessous, et apparemment il va compiler, mais pas de lien. (message d'erreur est un le bas de ce message)Indéfini Symbole: _sf_open (truc audio simple sur OSX)

J'utilise libsndfile pour ouvrir des fichiers audio, et l'éditeur de liens ne semble pas trouver les fichiers de bibliothèque corrent pour cela. C'est sur OS X 10.5.

J'ai téléchargé libsndfile à partir de mega-nerd.com et l'ai installé via la procédure ususal configure, make, sudo make install. Y a-t-il autre chose que je dois faire? Editer: J'ai installé macports sur mon système, si cela vous préoccupe.

Voici mon code:

#include <iostream> 
#include <string> 
#include <sndfile.h> 
#include "stereoSplit.h" 
using namespace std; 

int stereoSplit(string filename) 
{ 
    cout << filename; 
    SF_INFO sfinfo; 
    sfinfo.format = 0; 
    SNDFILE * soundfile; 
    soundfile = sf_open(filename.c_str(), SFM_READ, &sfinfo); 
    return 0; 
} 

int main (int argc, char const *argv[]) 
{ 
    return stereoSplit("testStereo.wav"); 
} 

Et voici le message d'erreur complète:

Undefined symbols: 
    "_sf_open", referenced from: 
     stereoSplit(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)in cc3hvkkk.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 
+1

Pourriez-vous copier/coller la ligne d'invocation du compilateur? Cela aidera à résoudre votre problème. –

+0

@yves voir la réponse de Neil Butterworth. Ma ligne était g ++ stereoSplit.cpp -o split'. Merci pour votre aide, tous les deux! – winsmith

Répondre

3

Vous devez créer un lien dans la bibliothèque. Votre commande compilateur devrait ressembler à:

g++ mystuff.cpp -lsndfile 
-1

Pour lier la bibliothèque dans Xcode, sélectionnez la cible du projet, ajouter un nouvel élément à lier binaire avec les bibliothèques, et trouvez le libsndfile.1.dynlib sur votre ordinateur.