2

OpenNI クラスを呼び出す、以下に示す非常に基本的なプログラム (test.cpp) を実行してコンパイルしようとしています。ここにあるファイルとディレクトリを確認できます。申し訳ありませんが、一部の文字はブラウザのエンコーディングで少し台無しになります。私は Linux コマンドの tree を使用しています。より良いコマンドがあれば教えてください。更新します。

ファイル構造

ここのガイドに従っています。「GCC / GNU Make」を参照してください。

#include < stdio.h > 
#include < OpenNI.h > 

using namespace openni; 

int 
main ( void ) 
{ 
    Status rc = OpenNI::initialize(); 

    if (rc != STATUS_OK) 
    { 
        printf("\nInitialize failed\n%s\n", OpenNI::getExtendedError()); 
        return 1; 
    } 

    printf("Hello, world!\n"); 
    return 0; 
} 

これをコンパイルするためにコマンドラインで実行しているものを次に示します(gcc 4.7.2):

gcc test.cpp -I../OpenNI-2.0.0/Include -L/home/evan/Code/OpenNi/Init -l OpenNI2 -o test 

これは問題なく動作しますが、./test を実行すると次のエラーが発生します。

Initialize failed 
DeviceDriver: library handle is invalid for file libOniFile.so 
Couldn't understand file 'libOniFile.so' as a device driver 
DeviceDriver: library handle is invalid for file libPS1080.so 
Couldn't understand file 'libPS1080.so' as a device driver 
Found no valid drivers in './OpenNI2/Drivers' 

ありがとう、どんな助けでも大歓迎です。

4

2 に答える 2

1

あなたのガイドからの指示は、それを言います

リンケージコマンドに「-Wl、-rpath ./」も追加することを強くお勧めします。そうしないと、アプリケーションの実行時にランタイムリンカが​​libOpenNI.soファイルを検出しません。(デフォルトのLinuxの動作では、/libおよび/usr / libでのみ共有オブジェクトを検索します)。

まさにこの問題があるようです-いくつかのライブラリが見つかりません。コンパイル文字列に適切なrpath(この場合は/ home / evan / Code / OpenNi / Init / OpenNI2 / Driversのようです)を追加してみてください。

于 2013-01-18T08:27:46.843 に答える