首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >GCC C ++链接器错误:未定义的引用''XXX'的虚表,未定义的引用'ClassName :: ClassName()'该怎么办?

GCC C ++链接器错误:未定义的引用''XXX'的虚表,未定义的引用'ClassName :: ClassName()'该怎么办?
EN

Stack Overflow用户
提问于 2018-04-19 00:47:14
回答 2查看 0关注 0票数 0

我已经包含了链接到它们库的头文件,但是我仍然收到链接器错误。除了显而易见的情况之外,是否还有一些可能的问题。

  1. 有没有办法确认我连接的静态库是64位?
  2. 有没有办法确认图书馆有我期待的类(和方法)?

Eclipse说:

代码语言:javascript
复制
构建目标:LinkProblem
调用:GCC C ++链接器
g ++ -L / home / notroot / workspace / somelib-3 / somelib / target / bin -o“LinkProblem”./src/LinkProblem.o -lsomelib1 -lpthread -lsomelib2 -lsomelib3
./src/LinkProblem.o:在函数`main'中:
/home/notroot/workspace/LinkProblem/Debug/../src/LinkProblem.cpp:17:对SomeClass :: close()'的未定义引用
./src/LinkProblem.o:在函数`SomeOtherClass'中:
/home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:148:对SomeClass :: SomeClass()'的未定义引用
/home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:148:未定义对“SomeOtherClass的vtable”的引用
/home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:151:对SomeClass ::〜SomeClass()'的未定义引用
./src/LinkProblem.o:在函数`〜SomeOtherClass'中:
/home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:140:未定义对“SomeOtherClass的vtable”的引用
/home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:140:对SomeClass ::〜SomeClass()'的未定义引用
/home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:140:对SomeClass ::〜SomeClass()'的未定义引用
collect2:ld返回1退出状态
make:*** [LinkProblem]错误1
EN

回答 2

Stack Overflow用户

发布于 2018-04-19 09:00:05

假设这些方法在其中一个库中,它看起来像一个排序问题。

将库链接到可执行文件时,它们按照它们声明的顺序完成。 此外,链接器只会采用解决当前未完成依赖关系所需的方法/函数。如果后续库使用原来不需要的方法/函数,则将缺少依赖关系。

怎么运行的:

  • 取出所有的目标文件并将它们组合成一个可执行文件
  • 解决目标文件之间的任何依赖关系。
  • 为了每个库的顺序:
    • 检查未解决的依赖关系,看看lib是否能解决它们。
    • 如果这样将所需部分加载到可执行文件中

例:

对象需要:

  • 打开
  • BatchRead
  • BatchWrite

Lib 1提供:

  • 打开

Lib 2提供

  • BatchRead(但使用lib1:读取)
  • BatchWrite(但使用lib1:写入)

如果像这样链接:

gcc -o plop plop.o -l1 -l2

但是,如果我像这样链接应用程序:

gcc -o plop plop.o -l2 -l1

票数 0
EN

Stack Overflow用户

发布于 2018-04-19 10:34:19

你已经用一个声明覆盖了一个子类中的虚函数,但是没有给出该方法的定义。例如:

代码语言:javascript
复制
class Base
{
    virtual void f() = 0;
}
class Derived : public Base
{
    void f();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档