GCC C 链接器错误:对虚拟表和构造函数的未定义引用
在 C 中,虚拟函数允许派生类覆盖其定义的方法基类。当链接使用虚拟函数的程序时,链接器要求这些方法的定义存在于目标文件中。未能提供这些定义会导致未定义的引用错误,例如:
可能原因
这些错误可能因多种原因而发生,包括:
确认静态库和类可用性
库位数: 要检查静态库是否为 64 位,请使用以下文件命令:
file -L <library_path>
如果库是 64 位,它应该显示 64 位 x86-64 共享对象。
类可用性: 使用 objdump -t 命令检查库是否包含特定的class:
objdump -t <library_path> | grep <class_name>
如果该类存在,它将在输出中列出。
示例问题
如提供的错误日志所示,对 SomeClass::close() 的未定义引用表明该类已被使用但尚未定义。同样,对 SomeClass::SomeClass() 和 SomeOtherClass 的 vtable 的未定义引用表明 SomeOtherClass 类的构造函数和虚拟表未在对象文件中定义。
解决方案
要解决此问题,请确保在适当的子类中定义所有虚拟函数,包含所需的头文件,并将正确的库链接到您的节目。
以上是为什么我在 GCC C 中收到'对虚拟表和构造函数的未定义引用”链接器错误?的详细内容。更多信息请关注PHP中文网其他相关文章!