0

glc-captureを介してOpenGLアプリケーションを開始しています。glcは、OpenGLバッファーとx11サーバーをフックするcライブラリです。glcは、OpenGL出力の記録を開始するために、OpenGLディスプレイにキーコマンドが必要です。

しかし、私のソフトウェアは、キーを押すのではなく、プログラムで出力の記録を開始する必要があります。glcファイルはすべて複雑すぎて、私の基本的な知識では完全に理解できません。しかし、基本的に構造は次のようです。

glc -captureは、いくつかの設定を行い、を実行するシェルスクリプトLD_PRELOAD=libglc-capture.so "${@}"です。x11.cには、主要なイベントをリッスンするx11フックが含まれています。いくつかの初期化が行われています。特別なキーイベントでは、関数start_capture()x11.cによって実行されます。 ファイルlib.hstart_capture()で定義され、 main.cファイルに実装されます。

私の質問:自分のc ++アプリケーションでstart_capture()関数を実行するにはどうすればよいですか? ヘッダーファイルを介してライブラリ(フックとキャプチャ)をリンクしてCMakeList.txtインクルードしようとしましたが、常に「未定義の参照:start_capture()」のままになります。

ライブラリをリンクするCMakeList.txtの行は次のとおりです。

target_link_libraries(${PROJECT_NAME} ${QT_LIBRARIES} libglc-hook.so libglc-capture.so libglc-core.so libglc-export.so)

EDIT2:実行時に発生するエラーは次のとおりです。

/opt/ros/fuerte/stacks/visualization/rviz/bin/rviz:シンボルルックアップエラー:/home/jrick/fuerte_workspace/sandbox/Bag2Film/lib/libBag2Film.so:未定義のシンボル:start_capture

nmからの出力:

jrick @ robot2:〜/ fuerte_workspace / sandbox / Bag2Film / lib $ nm libBag2Film.so | grepキャプチャ

0000000000003a30 t start_capture

0000000000003790 t stop_capture

4

1 に答える 1

2

glc-capture についてはわかりませんが、あなたの言うことから、アプリケーションを libglc-capture に対して直接リンクできるはずです (-lglc-captureリンカー フラグとして渡してみてください)。それでもうまくいかない場合は、ライブラリのドキュメントを参照してください。

さらに、 の宣言を含むヘッダー ファイルをインクルードする必要がありますstart_capture。繰り返しますが、ライブラリのドキュメントを参照して、使用するファイルを確認してください。ヘッダーが存在しない場合でも、それを自分で宣言できます (C ライブラリのように聞こえるので、行に沿った何かextern "C" { void start_capture(); }がそれを行う可能性があります。

これらの変更後もプロジェクトがコンパイルおよびリンクさstart_capture()れる場合は、必要な場所に呼び出しを追加してください。

役に立たなかったらここに戻ってきてください。

于 2013-03-07T12:47:29.403 に答える