Неопределенные проблемы с символами при использовании пространства имен OpenMS - PullRequest
1 голос
/ 08 ноября 2010

Я пытаюсь заставить некоторый пример кода работать счастливо с 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

Это приводит к огромному количеству ошибок (на самом деле около 500Кб). Проблема, похоже, заключается в «использовании пространства имен 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 Ответ

1 голос
/ 08 ноября 2010

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

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

...