0

CLucene の小さなラッパーを作成しています。

ofxCLucene.h

#ifndef _OFXCLUCENE_
#define _OFXCLUCENE_

#include "ofMain.h"
#include "ofxXmlSettings.h"
#include "ofxDirList.h"
#include "CLucene.h"

using namespace lucene;
using namespace lucene::analysis;
using namespace lucene::analysis::standard;
using namespace lucene::index;
using namespace lucene::document;
using namespace lucene::queryParser;
using namespace lucene::search;
using namespace lucene::store;


class ofxCLucene {
private:
  string name;
  SimpleAnalyzer *sanalyzer; 
  Directory *dir;
  IndexWriter *writer;
  IndexReader *reader;

public:
  ofxCLucene(string name);
  ~ofxCLucene();

  void addDocumentsFromDirectory(string pathToDir);
  void addDocumentXML(ofxXmlSettings *docXML);

  void indexReader();
  void closeIndex();

  Hits* search(string query); 

};

#endif

ofxCLucene.cpp

#include "ofxCLucene.h"

//------------------------------------------------------------------------------
ofxCLucene::ofxCLucene(string name) {
  this->name = name;
  sanalyzer = new SimpleAnalyzer();
}

...

問題なくコンパイルできますが、プロジェクトに配置して新しいオブジェクトを作成すると、エラーが発生しました。

 "vtable for lucene::analysis::Analyzer", referenced from:


      __ZTVN6lucene8analysis8AnalyzerE$non_lazy_ptr in ofxCLucene.o


     (maybe you meant: __ZTVN6lucene8analysis8AnalyzerE$non_lazy_ptr)


  "vtable for lucene::analysis::SimpleAnalyzer", referenced from:


      __ZTVN6lucene8analysis14SimpleAnalyzerE$non_lazy_ptr in ofxCLucene.o


     (maybe you meant: __ZTVN6lucene8analysis14SimpleAnalyzerE$non_lazy_ptr)


ld: symbol(s) not found


collect2: ld returned 1 exit status

両方のソース コードは次のとおりです。

class Analyzer:LUCENE_BASE{
public:

    virtual TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader)=0;

    virtual ~Analyzer(){
    }

    virtual int32_t getPositionIncrementGap(const TCHAR* fieldName);
};



class SimpleAnalyzer: public Analyzer {
public:
    TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader);
    ~SimpleAnalyzer(){}
};

名前空間の問題だと思ったので、電話してみます

analyzer::SimpleAnalyzer *sanalyzer = new analyzer::SimpleAnalyzer();

しかし、問題は残ります。

提案?ありがとうございました

4

1 に答える 1

0

これはMac上にあると思いますか?私はMacでのコンパイルにあまり慣れていません。

どのようにコンパイルしているか教えていただけますか (つまり、どのようなコンパイル フラグなど)。そして、おそらくコンパイル可能な例を追加してください)。

また、あなたの環境でこのコードをコンパイルできますか?

#include "CLucene.h"
int main(){
   lucene::analysis::SimpleAnalyzer *sanalyzer = new lucene::analysis::SimpleAnalyzer();
}

上記のコードを次のコマンドで問題なくコンパイルしました。(私は64ビットマシンを使用しているため、-fPIC)。

g++ test.cpp -lclucene -I/usr/lib -fPIC

于 2011-02-12T23:11:04.487 に答える