我正在使用Eclipse-CDT在Ubuntu x64上设置一个C++项目。我基本上是在打个招呼,并连接到商业的3rd Party库。
我已经包含了链接到其库的头文件,但是仍然出现链接器错误。除了明显的问题以外,这里还有其他可能的问题吗(例如,我99%确信我正在链接到正确的库)。
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()的 undefined reference
./src/LinkProblem.o:在函数“SomeOtherClass”中:
/home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:148:对`SomeClass::SomeClass()的 undefined reference
/home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:148:对`vtable for SomeOtherClass'的 undefined reference
/home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:151:对`SomeClass::〜SomeClass()'的 undefined reference
./src/LinkProblem.o:在`〜SomeOtherClass'函数中:
/home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:140:未定义对`vtable for SomeOtherClass'的引用
/home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:140:对`SomeClass::〜SomeClass()'的 undefined reference
/home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:140:对`SomeClass::〜SomeClass()'的 undefined reference
collect2:ld返回1退出状态
make:*** [LinkProblem]错误1
最佳答案
假设这些方法在其中一个库中,则看起来像是一个排序问题。
将库链接到可执行文件时,它们按声明的顺序完成。
同样,链接器将仅采用解决当前 Unresolved 依赖关系所需的方法/功能。如果随后的库随后使用对象最初不要求的方法/功能,则将缺少依赖项。
这个怎么运作:
例:
对象需要:
库1提供:
库2提供
如果像这样链接:
然后,链接器将无法解析读取和写入符号。
但是,如果我这样链接应用程序:
然后它将正确链接。由于l2解决了BatchRead和BatchWrite依赖关系,但还添加了两个新的依赖关系(读和写)。当我们与l1链接时,接下来的所有四个依赖关系都已解决。
关于c++ - GCC C++链接器错误: Undefined reference to 'vtable for XXX' ,对 'ClassName::ClassName()'的 undefined reference ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1095298/