【问题标题】:Undefined symbol issues when using OpenMS namespace使用 OpenMS 命名空间时出现未定义符号问题
【发布时间】:2010-11-07 21:33:40
【问题描述】:

我正在尝试让一些示例代码与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

有人知道我做错了什么吗?

【问题讨论】:

    标签: c++ compiler-construction compiler-errors


    【解决方案1】:

    尝试将其编译为目标文件(-c),看看问题是否仍然存在。例如:这是编译问题还是链接问题

    另外:是否应该有一个 -L 标志来搜索特定的库路径?是否应该有一个 -l 标志来链接特定的

    【讨论】:

    • 哦,好电话。我已经添加了 OpenMS 库,但我认为我仍然需要 Qt——Qt 库通常安装在哪里?
    • 我认为默认是/usr/local/Trolltech/Qt-$VERSION/,但我可能弄错了……
    • 其实我找到了另一种方法(Ree 先生的方法也可以)。我使用 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。
    猜你喜欢
    • 2011-04-07
    • 2010-11-24
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2017-10-09
    相关资源
    最近更新 更多