0

プログラムを実行すると、次のエラーが発生します。

E: libsim.so を読み込めません: libsim.so: 未定義のシンボル: _ZTV15IteratorRegFile

sim.cpp には s.th があります。お気に入り

//IteratorRegFileIs is a wrapper that calls the constructor for IteratorRegFile
Fwk::Ptr<IteratorRegFile> iteratorRegFile_ = IteratorRegFile::IteratorRegFileIs( "RF" );
void init(){
  SparseArrayInt64 *sparse_array = new SparseArrayInt64(segID);
}

SparseArrayInt64.cpp:

extern Fwk::Ptr<IteratorRegFile> iteratorRegFile_;

IteratorRegFile.h:

public:
  static IteratorRegFile::ValidPtr IteratorRegFileIs(Tac::Name _name) {
    IteratorRegFile * m = new IteratorRegFile(_name);
    m->referencesDec(1);
    return m;
  }
protected:
   IteratorRegFile( const IteratorRegFile& );
   explicit IteratorRegFile(Tac::Name _name): Tac::Entity(_name),
     index_(0) {
    handleInit();
   }

libがもう見つけられないように、コンパイラが関数をマングリングしている理由は何ですか?

4

1 に答える 1

1

Linux で gcc を使用してこれを行う場合:

c++filtによる_ZTV15IteratorRegFilevtable for IteratorRegFile. したがって、マングルされた名前は、関数ではなく vtvable を指します。

私はいくつかの検索を行い、このアドバイスを見つけました"You must implement virtual methods of your class because that's when the compiler actually generates the vtable for it."

次の方法で、モジュールに含まれるシンボルを確認できます。
nm your-module-name

このリンクが役立つと思います:

于 2012-05-18T04:50:51.287 に答える