2010-11-07 3 views
1

Я пытаюсь получить пример кода для работы с OpenMS и столкнуться с множеством проблем. У меня есть (только небольшой пример программы, которая поставляется в качестве примера):Неопределенные проблемы с символами при использовании пространства имен 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; 
} 

И я скомпилировать:

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

Он приходит с лодкой ошибок (о ~ 500Kb из них, на самом деле). Проблема, похоже, заключается в «использовании пространства имен OpenMS»; Небольшой образец ошибок:

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 

Кто-нибудь имеет представление о том, что я не делаю правильно?

ответ

1

Попробуйте скомпилировать его в файл объекта (-c) и посмотреть, не возникли ли проблемы. E..g .: Является ли это компиляционной проблемой или проблема связи?

также: Должна ли быть -L флага для поиска конкретного библиотеки пути? Должен ли быть флаг -l, который ссылается на конкретную библиотеку ?

+0

О, хороший звонок. Я добавил OpenMS lib, но я думаю, что мне все еще нужен Qt - где обычно устанавливаются библиотеки Qt? – sbirch

+0

Я думаю, что по умолчанию это/usr/local/Trolltech/Qt- $ VERSION /, но я мог ошибаться ... –

+0

Я действительно нашел другой способ (метод г-на Ри тоже может работать). Я использовал qmake -project, отредактировал .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) и используется qmake -makefile -spec macx-g ++/make. – sbirch

Смежные вопросы