0

この問題は 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 ファイルにあります。パラメータはこの問題を処理しませんか?

共有ライブラリを作成するときに、実行時にリンクの問題が発生しないことを確認したいと思います。最初に適切にリンクされていた場合、バイナリ ファイルにコンパイルしようとすると、これらのエラーはすべて消えますか?

4

1 に答える 1

0

最初の呼び出しで実行可能ファイルを作成するようにコンパイラーに指示しているのですが、実行可能ファイルにはmain()関数が必要ですが、それが見つかりません。いいえ、エラーは正常ではありません。共有ライブラリを作成するには、GCCの「-shared」オプションを使用します。ここでいくつかのテストコードを試してみると、私のシステムでは、コンパイル時に「-fPIC」も必要ですが、それは異なる場合があります。最良のアイデアは、システム上で正しく構築されている他のいくつかのライブラリのコンパイラとリンカのコマンドラインを分析することです。

サブディレクトリから欠落しているシンボルを追加するには、それらもコンパイルする必要がありますg++ *.cpp ./GestureRecognizer/*.cpp ...。「-I...」は、コンパイラが。を見つけたときにどこを検索するかを指示するだけ#include ...です。これが必要でなくても驚かないでしょう。多くのプロジェクトが#include "GestureRecognizer/Foo.h"それを直接達成するために使用しています。

ところで:

  • コンパイラを実行するときに警告をアクティブにすることを検討してください( "-W ...")。
  • コンパイル( "-c")とリンクに分割できます。ただし、どちらの場合も「g++」を使用してください。これにより、さまざまなリンカー設定をテストする際の所要時間が短縮されます。
于 2013-01-16T06:19:02.010 に答える