0

私が作業しているプロジェクトは、VTK(ver 5.8.0)、c ++ 4.6.3、buntu12.04を使用してい
ます。コードはエラーなしでコンパイルされます。リンカが失敗している:QVTKWidget2 :: QVTKWidget2(QWidget *、QGLWidget const *、QFlags)への未定義の参照
このクラスは、VTK/GUISupport/Qt/QVTKWidget2.cxx 私が知る限り、libQVTK.agrep -i -l QVTKWidget2 *.a)またはlibQVTK.solibQVTKWidgetPlugin.soにあります。 (grep -i -l QVTKWidget2 *.so)しかし、参照/記号がそこにあると言うのにテキスト検索で十分かどうかはわかりません。リンカーが何を探しているのかわかりません。
シンボルを見つけようとするとnm -A *.a|grep QVTKWidget2、5つの応答がわかりにくくなりすぎて理解できません。(何を探すべきかわかりません。)。
soファイルを見ると(ldd libQVTK.so)、さまざまなライブラリへの参照があり、QVTKWidget2については言及されていません。(さらに混乱します。)
リンカーcmdは次/usr/bin/c++ のようになります。ライブラリは次のように明示的に呼び出されます。/full/path/to/VTK/build/bin/libQVTK.a

編集1:
この場合、単純なテキスト検索では不十分です。 libQVTK.agrep -i -l QVTKWidget2 *.aにフラグを立て ます。アーカイブを詳しく見ると、このlibにはQVTKWidget.cxx.oが含まれています。QVTKWidget2.cxx.o についての言及はありません。これは名前マングリング、または単にアーカイブ形式によるものだと思います。 ar -t libQVTKA.a

編集2: nm -C libQVTK.a | grep QVTKWidget2何も返しません。 nm -C libQVTK.a |grep QVTKWidgetこのアーカイブにはQVTKWidgetクラスのメンバーのみが存在することを示しています。 、 QVTKWidgetクラスのメンバーのみnm -C libQVTK.so | grep QVTKWidget2を表示しますが、ここでも何も返しません。libQVTKWidgetPlugin.sonm -C libQVTK.so | grep QVTKWidgetの結果は同じです。 ここでも、名前のマングリングが原因で、テキスト検索は誤解を招く可能性があります。

QVTKWidget2クラスを持つライブラリをすばやく見つける方法はありますか?(QVTKWidget2.cxx.o)

4

1 に答える 1

1

ここでの問題は、QVTKWidget2クラスが構築されていなかったことです。これは、OpenGlのものがビルドされたときにのみビルドされます。これはCMAKEフラグによって制御されます:VTK_USE_QVTK_QTOPENGL(オン)
(私は本当にCCMAKEが嫌いです。)

于 2013-01-25T20:25:34.553 に答える