Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法加载未定义的符号C++;名字改编_C++_Extern - Fatal编程技术网

C++ 无法加载未定义的符号C++;名字改编

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" );

我在执行程序时遇到以下错误:

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" );
void init(){
  SparseArrayInt64 *sparse_array = new SparseArrayInt64(segID);
}

你知道为什么编译器会破坏函数,使lib无法再找到它吗?

如果你在使用gcc的Linux上这样做:

根据c++filt
,ZTv15迭代器文件
对于迭代器文件是
vtable。因此,损坏的名称指的是vtable,而不是您的函数

我做了一些搜索,发现了这样一条建议:“您必须实现类的虚拟方法,因为编译器实际上是在这个时候为它生成vtable的。”

您可以通过以下方式检查模块中有哪些符号:
nm您的模块名称

我想这些链接可能会有所帮助:


Eh,一个是
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();
   }