执行程序时出现以下错误:
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不再找到它了吗?
答案 0 :(得分:0)
如果你在Linux上用gcc执行此操作:
根据c ++ filt _ZTV15IteratorRegFile
是vtable 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
我猜这个链接可能会有所帮助: