2010-11-07 73 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庫,但我認爲我仍然需要Qt - Qt庫通常安裝在哪裏? – sbirch 2010-11-07 22:00:54

+0

我認爲默認是/ usr/local/Trolltech/Qt- $ VERSION /,但我可能被誤認爲... – 2010-11-08 03:10:56

+0

我實際上找到了另一種方法(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。 – sbirch 2010-11-08 04:22:02