使用lib.a文件调试链接错误

时间:2013-01-23 22:29:22

标签: c++ build compilation linker linker-errors

我正在使用的项目,使用VTK(版本5.8.0),c ++ 4.6.3,buntu 12.04
代码编译没有任何错误。链接器失败:未定义引用QVTKWidget2 :: QVTKWidget2(QWidget *,QGLWidget const *,QFlags)
这个类在VTK/GUISupport/Qt/QVTKWidget2.cxx据我所知,这是在 libQVTK.a grep -i -l QVTKWidget2 *.a)或 libQVTK.so libQVTKWidgetPlugin.so grep -i -l QVTKWidget2 *.so)但我不确定文本搜索是否足以说明引用/符号存在。我不确定链接器正在寻找什么 当我试图找到符号w / nm -A *.a|grep QVTKWidget2时,五个回答对我来说太难以理解了。 (我不确定该找什么。)
当我查看.so文件(ldd libQVTK.so)时,我看到了对不同库的引用,并没有提到QVTKWidget2。 (进一步混淆。)
链接器cmd为/usr/bin/c++使用/full/path/to/VTK/build/bin/libQVTK.a

显式调用库

编辑1:
在这种情况下,简单的文本搜索不够好。 grep -i -l QVTKWidget2 *.a将标记 libQVTK.a 当仔细查看存档ar -t libQVTKA.a时,此lib包含 QVTKWidget.cxx.o 没有提及 QVTKWidget2.cxx.o 。我猜这是由于名称错误,或仅仅是归档格式。

编辑2: nm -C libQVTK.a | grep QVTKWidget2什么都不返回。 nm -C libQVTK.a |grep QVTKWidget表示此存档中只有QVTKWidget类成员。 nm -C libQVTK.so | grep QVTKWidget2,再次不返回任何内容,而nm -C libQVTK.so | grep QVTKWidget仅显示QVTKWidget类成员。 libQVTKWidgetPlugin.so 的结果相同。再次,由于名称重整,文本搜索会产生误导。

有没有快速的方法找出哪个库有QVTKWidget2类? (QVTKWidget2.cxx.o)

1 个答案:

答案 0 :(得分:1)

这里的问题是没有构建QVTKWidget2类。它仅在构建OpenGl内容时构建。由CMAKE标志控制:VTK_USE_QVTK_QTOPENGL(on)
(我真的很讨厌CCMAKE。)