質問

私はルートを持っていないSolarisサーバ上でコンパイル samtools にしようとしています。 Samtoolsはzlibのに依存します。 samtoolsだけの小さなファイルを扱う:このバージョンに対してコンパイルsamtoolsが期待される効果を持っているように、このマシンのシステムのzlibは、大容量ファイルのサポート付きでコンパイルされていません。私は大きなファイルを扱うことができるようにする必要があります。幸いなことに、大容量のファイルをサポートして/usr/local/apps/zlib-1.2.5/に管理者によってコンパイルされたzlibのバージョンがあります。私はCFLAGSに-R /usr/local/apps/zlib-1.2.5/libを追加することで、この問題に対処してコンパイルすることができますが、これは仕事にではないようです。次のような症状があります:

私はsamtoolsを実行しようとすると、それはこのエラーでクラッシュします:

ld.so.1: samtools: fatal: relocation error: file samtools: symbol gzopen64: referenced symbol not found

私はLD_LIBRARY_PATHに/usr/local/apps/zlib-1.2.5/を追加する場合は、samtoolsは罰金に動作します。

LDDとsamtoolsを分析し、readelfがは以下を生成します:

$ ldd -r samtools
        libnsl.so.1 =>   /usr/lib/libnsl.so.1
        libsocket.so.1 =>        /usr/lib/libsocket.so.1
        libresolv.so.2 =>        /usr/lib/libresolv.so.2
        libm.so.2 =>     /usr/lib/libm.so.2
        libcurses.so.1 =>        /usr/lib/libcurses.so.1
        libz.so =>       /usr/lib/libz.so
        libc.so.1 =>     /usr/lib/libc.so.1
        libmp.so.2 =>    /usr/lib/libmp.so.2
        libmd.so.1 =>    /usr/lib/libmd.so.1
        libscf.so.1 =>   /usr/lib/libscf.so.1
        libdoor.so.1 =>  /usr/lib/libdoor.so.1
        libuutil.so.1 =>         /usr/lib/libuutil.so.1
        libgen.so.1 =>   /usr/lib/libgen.so.1
        symbol not found: gzopen64              (samtools)

$ ldd -s samtools

   ...(snip)...

   find object=libz.so; required by samtools
    search path=/usr/lib:/usr/openwin/lib:/usr/dt/lib:/usr/local/lib  (LD_LIBRARY_PATH)
    trying path=/usr/lib/libz.so
        libz.so =>       /usr/lib/libz.so

   ...(snip)...

$ readelf -d samtools | grep RPATH
 0x0000000f (RPATH)                      Library rpath: [/usr/local/apps/zlib-1.2.5/lib:/usr/local/apps/gcc-4.5.1/lib]

/usr/local/apps/zlib-1.2.5/libは私を理解し、共有ライブラリを実行時に検索されることになっているバイナリのRPATHで明らかにされるように。しかし、ldd -sショーは、このディレクトリが検索されることはありませんことを。 LD_LIBRARY_PATHにこのパスを追加し、LDDのコマンドを再実行すると期待される効果を有する:ディレクトリが検索され、libzを正しいバージョンが検出された

だから私はLD_LIBRARY_PATHを使用せずに、実行時に/usr/local/apps/zlib-1.2.5/libで検索するsamtoolsを強制することができますどのように?

<時間>

編集:ここに -Rオプションを行うには正しいものであることを示すように思われます。しかし、それは動作しません。

役に立ちましたか?

解決

私は決して、Solarisの専門家だが、この行:

find object=libz.so; required by samtools
 search path=/usr/lib:/usr/openwin/lib:/usr/dt/lib:/usr/local/lib  (LD_LIBRARY_PATH)
LD_LIBRARY_PATHがすでに設定されていることを私に示しているようだ、とその中/usr/libパスは、任意の実行時リンカーのパスに優先を取っています。それは実際に存在しているかどうかの設定を解除LD_LIBRARY_PATHができ、ことを決議それ?

かどうかを確認
scroll top