GCC C++ 链接错误:未定义对 'XXX 的虚表, 未定义对 'ClassName::ClassName()' 的引用。

72

我正在Ubuntu x64上用Eclipse-CDT设置一个C++项目,基本上是在做hello world并链接到一个商业第三方库。

我已经包含了头文件,链接到他们的库,但我仍然遇到链接错误。除了显而易见的问题(例如,我99%确定我正在链接到正确的库之外),这里还有可能出现的其他问题吗?

  1. 有没有办法确认我链接的静态库是64位的?
  2. 有没有办法确认该库具有我期望其具有的类(和方法)?

Eclipse显示:

构建目标: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”的虚表
/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”的虚表
/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

第三方库是64位的吗? - Daniel A. White
是的,它是64位的。不过你可能有所发现。我如何确保我的代码/项目是64位的?在Visual Studio中,我创建了一个x64构建配置。 - waterlooalex
1
有没有一种方法可以确认第三方库是64位的?例如,使用工具检查.a文件或其他什么东西? - waterlooalex
它在哪里?谷歌显示它位于 /usr/lib64 中。 - Daniel A. White
@Daniel:在谷歌上关于它们的信息不多。我有它们的样例,构建很好。我也可以在Windows上链接它们的库(x64)没问题。我正在联系他们寻求支持,只是需要一些时间。可能我的困难之一是我对gcc/linux还比较新手。 - waterlooalex
显示剩余4条评论
12个回答

0
我在使用Qt进行“hello world”类似的操作时遇到了这个错误信息。通过正确运行qt moc(元对象编译器)并正确编译和包含这些moc生成的文件,问题得以解决。

0
我把这个留给未来的访问者:
如果您在创建一个“Exception”对象时收到错误,那么造成这个错误的原因可能是缺少对“what()”虚函数的定义。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接