この問題は Fubi に固有のものではなく、一般的なリンカの問題です。ここ数日 (5 日) はリンク エラーでいっぱいでしたが、ほんの一握りにまで絞り込むことができました。
Linux 環境で Fubi (Full Body Interaction フレームワーク) をコンパイルしようとしています。これは Windows 7 でのみテストされており、Web には *nix プラットフォームでコンパイルするためのリソースが不足しています。
さて、上で述べたように、主に不適切な g++ フラグに対処する、大量のリンクの問題がありました。Fubi は、その基本機能を提供するために、OpenNI と NITE (必要に応じて OpenCV も) を必要とします。OpenNI と NITE フレームワークの両方のサンプルを正常にコンパイルできました。
私の知る限り、Fubi はフレームワークであるため、バイナリ ファイルではなく共有ライブラリをコンパイルする必要があります。
次のコマンドを使用してバイナリファイルとしてコンパイルしようとすると
g++ *.cpp -lglut -lGL -lGLU -lOpenNI -lXnVNite_1_5_2 -I/usr/include/nite -I/usr/include/ni -I/usr/include/GL -I./GestureRecognizer/ -o FubiBin
ここにある出力を取得します。(ちょっと長いので、フォーマットを台無しにしたくありませんでした)
代わりにオブジェクト ファイル (-c フラグ) にコンパイルすると、エラーは表示されず、オブジェクト ファイルが正常にビルドされます。注、私は次のコマンドを使用しています:
g++ -c *.cpp -lglut -lGL -lGLU -lOpenNI -lXnVNite_1_5_2 -I/usr/include/nite -I/usr/include/ni -I/usr/include/GL -I./GestureRecognizer/
その後、ar
コマンドを使用して、静的にリンクされたライブラリを生成できます。[おそらく] エラーは発生しません (これは私の推測にすぎません)。リンカーがまだ実行されていないため、これらのエラーは表示されません。
辛抱強く読んでくれてありがとう。最後に質問タイム。
1)バイナリ ファイルにコンパイルしようとしたときのメイン ノーマルへの未定義参照に関する最初のエラーはありますか? そのフォルダー内のすべてのファイルを検索しましたが、メイン関数は 1 つも存在しません。
2) 残りの未定義の参照エラーは、言及された関数が見つからないことを訴えます。これらの関数はすべて、私がコンパイルしているパスのサブディレクトリであるGestureRecognizer/-I./GestureRecognizer/
サブディレクトリの .cpp および .h ファイルにあります。パラメータはこの問題を処理しませんか?
共有ライブラリを作成するときに、実行時にリンクの問題が発生しないことを確認したいと思います。最初に適切にリンクされていた場合、バイナリ ファイルにコンパイルしようとすると、これらのエラーはすべて消えますか?