1

ホームディレクトリの下にローカルバージョンのOpenGLを作成しました。別の共有ライブラリをリンクしたいのですが、lddの報告によると、何らかの理由でリンカーが/ usr/libの下のライブラリにリンクしています。

$ cc -o lib / libtfont.so -shared -Wl、-soname、/ home / wknight / proj / wkl / tfont.lib / lib / libtfont.so tfont.o -L / home / wknight / proj / wkl / img .lib / lib -limg -L / home / wknight / swtools / opengl / lib -lGL -lGLU

$ ldd lib / libtfont.so
    linux-gate.so.1 =>(0xb7710000)
    /home/wknight/proj/wkl/img.lib/lib/libimg.so(0xb76fc000)
    libGL.so.1 => /usr/lib/libGL.so.1(0xb7689000)
    libGLU.so.1 => /usr/lib/libGLU.so.1(0xb7618000)
    libc.so.6 => /lib/i686/cmov/libc.so.6(0xb74d1000)
    libX11.so.6 => /usr/lib/libX11.so.6(0xb73b4000)
    libXext.so.6 => /usr/lib/libXext.so.6(0xb73a5000)
    libXxf86vm.so.1 => /usr/lib/libXxf86vm.so.1(0xb73a0000)
    libXdamage.so.1 => /usr/lib/libXdamage.so.1(0xb739c000)
    libXfixes.so.3 => /usr/lib/libXfixes.so.3(0xb7397000)
    libdrm.so.2 => /usr/lib/libdrm.so.2(0xb738d000)
    libm.so.6 => /lib/i686/cmov/libm.so.6(0xb7367000)
    libpthread.so.0 => /lib/i686/cmov/libpthread.so.0(0xb734e000)
    libdl.so.2 => /lib/i686/cmov/libdl.so.2(0xb7349000)
    libstdc++。so.6=>/usr/lib/libstdc++.so.6(0xb7254000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1(0xb7236000)
    /lib/ld-linux.so.2(0xb7711000)
    libxcb.so.1 => /usr/lib/libxcb.so.1(0xb721d000)
    librt.so.1 => /lib/i686/cmov/librt.so.1(0xb7214000)
    libXau.so.6 => /usr/lib/libXau.so.6(0xb7211000)
    libXdmcp.so.6 => /usr/lib/libXdmcp.so.6(0xb720b000)

$ ls -l / home / wknight / swtools / opengl / lib / libGL *
lrwxrwxrwx 1 wknight wknight 10 Jan 25 16:57 /home/wknight/swtools/opengl/lib/libGL.so-> libGL.so.1
lrwxrwxrwx 1 wknight wknight 12 Jan 25 16:57 /home/wknight/swtools/opengl/lib/libGL.so.1-> libGL.so.1.2
-rwxr-xr-x 1 wknight wknight 1836469 Jan 25 16:57 /home/wknight/swtools/opengl/lib/libGL.so.1.2
lrwxrwxrwx 1 wknight wknight 11 Jan 25 16:57 /home/wknight/swtools/opengl/lib/libGLU.so-> libGLU.so.1
lrwxrwxrwx 1 wknight wknight 20 Jan 25 16:57 /home/wknight/swtools/opengl/lib/libGLU.so.1-> libGLU.so.1.3.070900
-rwxr-xr-x 1 wknight wknight 1634905 Jan 25 16:57 /home/wknight/swtools/opengl/lib/libGLU.so.1.3.070900
lrwxrwxrwx 1 wknight wknight 11 Jan 25 16:57 /home/wknight/swtools/opengl/lib/libGLw.so-> libGLw.so.1
lrwxrwxrwx 1 wknight wknight 15 Jan 25 16:57 /home/wknight/swtools/opengl/lib/libGLw.so.1-> libGLw.so.1.0.0
-rwxr-xr-x 1 wknight wknight 37068 Jan 25 16:57 /home/wknight/swtools/opengl/lib/libGLw.so.1.0.0
$

これは、ローカルバージョンのlibGL.soの名前を変更し、新しい名前にリンクした場合でも発生します。ですから、私にはわからないことが舞台裏で起こっています。リンカはld.so.cacheか何かを探していますか?どうすればオーバーライドできますか?

4

2 に答える 2

1

私は答えを見つけました-LD_LIBRARY_PATHをローカルバージョンのlibGL.soに設定する必要がありました:

$ export LD_LIBRARY_PATH = $ HOME / swtools / opengl / lib

$ ldd lib / libtfont.so
    linux-gate.so.1 =>(0xb778c000)
    /home/wknight/proj/wkl/img.lib/lib/libimg.so(0xb7778000)
    libGL.so.1 => /home/wknight/swtools/opengl/lib/libGL.so.1(0xb771f000)
    libGLU.so.1 => /home/wknight/swtools/opengl/lib/libGLU.so.1(0xb76ae000)
    libc.so.6 => /lib/i686/cmov/libc.so.6(0xb7559000)
    libX11.so.6 => /usr/lib/libX11.so.6(0xb743c000)
    libXext.so.6 => /usr/lib/libXext.so.6(0xb742d000)
    libXdamage.so.1 => /usr/lib/libXdamage.so.1(0xb742a000)
    libXfixes.so.3 => /usr/lib/libXfixes.so.3(0xb7424000)
    libXxf86vm.so.1 => /usr/lib/libXxf86vm.so.1(0xb741f000)
    libdrm.so.2 => /usr/lib/libdrm.so.2(0xb7415000)
    libpthread.so.0 => /lib/i686/cmov/libpthread.so.0(0xb73fc000)
    libdl.so.2 => /lib/i686/cmov/libdl.so.2(0xb73f8000)
    libstdc++。so.6=>/usr/lib/libstdc++.so.6(0xb7302000)
    libm.so.6 => /lib/i686/cmov/libm.so.6(0xb72dc000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1(0xb72be000)
    /lib/ld-linux.so.2(0xb778d000)
    libxcb.so.1 => /usr/lib/libxcb.so.1(0xb72a5000)
    librt.so.1 => /lib/i686/cmov/librt.so.1(0xb729c000)
    libXau.so.6 => /usr/lib/libXau.so.6(0xb7299000)
    libXdmcp.so.6 => /usr/lib/libXdmcp.so.6(0xb7293000)
$

これは、lddが共有ライブラリ自体に存在するものだけでなく、共有ライブラリの依存関係を報告する際にランタイム環境を使用する必要があることを考えると、今では理にかなっています。共有ライブラリに対してリンクされた実行可能ファイルを使用する前にLD_LIBRARY_PATHを設定していましたが、共有ライブラリ自体を調べるためにも設定する必要があることは今まで思い浮かびませんでした。

于 2013-01-30T20:17:25.617 に答える
-3

ホームディレクトリの下にOpenGLのローカルバージョンを作成しました

なんで?これを行うあなたの意図は何ですか?OpenGLはそれほどライブラリではなく、仕様です。構築したのはおそらくMesaGLです。MesaGLは、特定のドライバーのサブセットでのみハードウェアアクセラレーションされたOpenGLを提供します。これは、MesaGLのバージョンと一致する必要があります。それらがないと、MesaGLは遅いソフトウェアラスタライザーフォールバックに陥ります。

原則として、プログラムは常にシステムのlibGL.soに動的にリンクします。libGL.soが存在しない場合、フォールバック実装は、非常に遅いソフトウェアラスタライザーを処理できる場合にのみ意味があります。それ以外の場合は、システムの欠点と、より優れたGPUをインストールするか、ドライバーのインストールを修正する必要があることをユーザーに通知することをお勧めします。


とにかく、ライブラリが検索されるパスを変更したい場合は、リンカフラグを調べる必要がありますrpath

于 2013-01-30T00:23:18.730 に答える