2010-11-07 24 views
1

J'essaie d'obtenir un exemple de code pour travailler avec bonheur avec OpenMS et rencontrer beaucoup de problèmes. J'ai (juste un petit programme échantillon fourni à titre d'exemple):Problèmes de symboles non définis lors de l'utilisation de l'espace de noms OpenMS

#include <OpenMS/FILTERING/SMOOTHING/GaussFilter.h> 
#include <OpenMS/FORMAT/MzMLFile.h> 
#include <OpenMS/KERNEL/StandardTypes.h> 
#include <stdio.h> 

using namespace OpenMS; 
using namespace std; 

Int main(){ 
    PeakMap exp; 

    MzMLFile mzdata_file; 
    mzdata_file.load("../sampledata_Centroidmode.mzML",exp); 

    GaussFilter g; 
    Param param; 
    param.setValue("gaussian_width",1.0); 
    g.setParameters(param); 

    g.filterExperiment(exp); 

    return 0; 
} 

Et je le compiler:

g++ -Wall -IOpenMS-1.7.0/include -IOpenMS-1.7.0/contrib/include -I/Library/Frameworks/QtCore.framework/Headers -arch i386 scratch.cpp 

Il arrive avec un bateau plein d'erreurs (environ ~ 500Kb d'entre eux, en fait). Le problème semble résider dans "using namespace OpenMS;" Un petit échantillon des erreurs:

Undefined symbols: 
    "OpenMS::DataValue::DataValue(int)", referenced from: 
     OpenMS::Internal::MzMLHandler<OpenMS::MSExperiment<OpenMS::Peak1D, OpenMS::ChromatogramPeak> >::handleUserParam_(OpenMS::String const&, OpenMS::String const&, OpenMS::String const&, OpenMS::String const&, OpenMS::String const&)in cc7cSzjW.o 
    "OpenMS::DataValue::DataValue()", referenced from: 
     OpenMS::Internal::MzMLHandler<OpenMS::MSExperiment<OpenMS::Peak1D, OpenMS::ChromatogramPeak> >::handleUserParam_(OpenMS::String const&, OpenMS::String const&, OpenMS::String const&, OpenMS::String const&, OpenMS::String const&)in cc7cSzjW.o 
    "OpenMS::SourceFile::operator!=(OpenMS::SourceFile const&) const", referenced from: 
     OpenMS::Internal::MzMLHandler<OpenMS::MSExperiment<OpenMS::Peak1D, OpenMS::ChromatogramPeak> >::writeTo(std::basic_ostream<char, std::char_traits<char> >&)in cc7cSzjW.o 
     OpenMS::Internal::MzMLHandler<OpenMS::MSExperiment<OpenMS::Peak1D, OpenMS::ChromatogramPeak> >::writeTo(std::basic_ostream<char, std::char_traits<char> >&)in cc7cSzjW.o 
     OpenMS::Internal::MzMLHandler<OpenMS::MSExperiment<OpenMS::Peak1D, OpenMS::ChromatogramPeak> >::writeTo(std::basic_ostream<char, std::char_traits<char> >&)in cc7cSzjW.o 

...

ld: symbol(s) not found 
collect2: ld returned 1 exit status 

Quelqu'un at-il aperçu de ce que je ne suis pas en train de faire?

Répondre

1

Essayez de le compiler dans un fichier objet (-c) et de voir si les problèmes se produisent toujours. Exemple: s'agit-il d'un numéro de compilation ou d'un numéro de liaison ?

Aussi: Faut-il un -L drapeau pour rechercher un chemin bibliothèque particulier? Devrait-il y avoir un drapeau -l pour lier dans une bibliothèque particulière?

+0

Oh bon appel. J'ai ajouté la bibliothèque OpenMS, mais je pense que j'ai encore besoin de Qt - où sont les bibliothèques Qt normalement installées? – sbirch

+0

Je pense que la valeur par défaut est/usr/local/Trolltech/Qt- $ VERSION /, mais je pourrais me tromper ... –

+0

J'ai effectivement trouvé une autre façon (la méthode de M. Ree peut fonctionner aussi). J'ai utilisé qmake -project, édité le .pro: (INCLUDEPATH + = OpenMS-1.7.0/include INCLUDEPATH + = OpenMS-1.7.0/contrib/include unix: LIBS + = OpenMS-1.7.0/contrib/lib unix: LIBS + = OpenMS-1.7.0/lib -lOpenMS) et utilisé qmake -makefile -spec macx-g ++/make. – sbirch