C++ 无法加载未定义的符号C++;名字改编
我在执行程序时遇到以下错误: E:无法加载libsim.so:libsim.so:未定义符号:_ztv15迭代器文件 在sim.cpp中有s.th。像C++ 无法加载未定义的符号C++;名字改编,c++,extern,C++,Extern,我在执行程序时遇到以下错误: E:无法加载libsim.so:libsim.so:未定义符号:_ztv15迭代器文件 在sim.cpp中有s.th。像 //IteratorRegFileIs is a wrapper that calls the constructor for IteratorRegFile Fwk::Ptr<IteratorRegFile> iteratorRegFile_ = IteratorRegFile::IteratorRegFileIs( "RF" );
//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);
}
你知道为什么编译器会破坏函数,使lib无法再找到它吗?如果你在使用gcc的Linux上这样做: 根据c++filt
,ZTv15迭代器文件
对于迭代器文件是vtable。因此,损坏的名称指的是vtable,而不是您的函数
我做了一些搜索,发现了这样一条建议:“您必须实现类的虚拟方法,因为编译器实际上是在这个时候为它生成vtable的。”
您可以通过以下方式检查模块中有哪些符号:nm您的模块名称
我想这些链接可能会有所帮助:
Fwk::Ptr
,另一个是iteratoregfile
——为什么一个的定义应该满足另一个?最后的“u”是否一直被使用?@stark是的,它一直被使用谢谢,但我仍然无法解决这个问题,因为iteratoregfile()似乎已经实现了。我已经添加了更多的代码。经过更多的工作,这解决了我的问题,谢谢。我删除了显式,并创建了构造函数的单独实现
extern Fwk::Ptr<IteratorRegFile> iteratorRegFile_;
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();
}