3

私は c++ を初めて使用し、新しいプロジェクトで理解できない問題を抱えています。
私のプログラムの関連部分は次のとおりです。

    #include <glew.h>      
    #include <SDL.h>
    #include <SDL_opengl.h>

    int initGlew()
    {
        if(glewInit()!=GLEW_OK)
        {
            printf("Unable to init glew!");
            return 1;
        }
        return 0;
    }

しかし、コードブロックで実行すると、次のランタイム エラーが発生します。

home/samuel/Dokumente/ProjekteC++/GameGL/bin/Debug/GameGL: error while loading shared libraries: libGLEW.so.1.9: cannot open shared object file: No such file or directory

ビルドオプションで、これらのsoファイルにリンクしました:

  • ../../../../../usr/local/lib/SDL
  • ../../../../../usr/local/lib64/libGLEW.so
  • ../../../../../usr/local/lib64/libGLEW.so.1.9

エラーの可能性がある場所をたくさん検索しましたが、何も見つかりませんでした。あなたが私を助けてくれることを願っています。

4

2 に答える 2

4

環境変数 LD_LIBRARY_PATH の使用は、一時的なテストのみのソリューションを目的としています。代わりに、Linux で同じパスをシステム全体の構成ファイルに入れる場合:

/etc/ld.so.conf

お気に入り :

cat /etc/ld.so.conf

/usr/lib64

次に、この変更の問題に取り組みます:

sudo ldconfig
于 2013-10-28T19:26:44.520 に答える
3

エラーは、実行時にダイナミックライブラリが見つからないことを示しています。アプリケーションをコンパイルすると、静的ライブラリ(.aファイル)にリンクしますが、実行時に.soファイルを動的にロードできます。これが、ここで行われていることです。

アプリケーションライブラリの依存関係を一覧表示すると、libGLEWが見つからないことがわかるでしょう。これは、コマンドラインでlddコマンドを使用して実行できます。

$ ldd <your_file>
    linux-vdso.so.1 =>  (0x00007fff769ff000)
    libGLEW.so.1.9 => not found
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2af9e28000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f2afa208000)

ライブラリ検索パスへのディレクトリの追加は、LD_LIBRARY_PATHエクスポートを使用して行われます。この場合も、このようにコマンドラインでこれを行うことができます。

$LD_LIBRARY_PATH=/usr/lib64 ldd <your_file>
    linux-vdso.so.1 =>  (0x00007fff2e053000)
    libGLEW.so.1.9 => /usr/lib64/libGLEW.so.1.9 (0x00007f4071ca5000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f40718c7000)
    libGL.so.1 => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 (0x00007f4071660000)
    ...

その後、lddコマンドを省略してアプリを実行できます。これをコードブロックで機能させる方法はわかりませんが、実行/デバッグ設定のどこかでデバッグ環境構成をセットアップできると思います。

ありがとう

于 2013-03-12T23:40:35.770 に答える