web-dev-qa-db-ja.com

CentOSの非標準libディレクトリでのldconfigの問題

メインドライブ(/usr/usr/localなどを含む)にストレージスペースがほとんどない仮想マシン(CentOS 5.3)を使用しています。ほとんどのストレージスペースは、/mntにマウントされている別のドライブで利用できます。したがって、このドライブに基本的なインストールディレクトリ(binincludelibなどのサブディレクトリを含む)を作成し、そこにライブラリをインストールしました。

[standage@vm142-46 ~]$ ls -lhp /mnt/lib
total 33M
-rw-r--r-- 1 standage iplant-everyone 21M Dec 21 16:29 libgenometools.a
-rwxr-xr-x 1 standage iplant-everyone 13M Dec 21 16:29 libgenometools.so

次に、自分が作成したコードを使用してそのライブラリにリンクしようとしましたが、次のメッセージが表示されました。

/usr/bin/ld: cannot find -lgenometools

作成した新しいインストールディレクトリでldconfigを更新していないことに気付いたので、先に進んで/mnt/lib/etc/ld.so.confに追加し、/sbin/ldconfigを実行しました。ただし、コードを再度リンクしようとすると、同じエラーが発生しました。

最終的に、/usr/local/lib64...へのシンボリックリンクを作成することで、ライブラリをリンクさせることができました。

[standage@vm142-46 ~]$ Sudo ln -s /mnt/lib/libgenometools.a /usr/local/lib64
[standage@vm142-46 ~]$ Sudo ln -s /mnt/lib/libgenometools.so /usr/local/lib64

...しかし、これは私の元の問題を実際には解決しません。それは単なるダクトテープの解決策です。最初に何を間違えたのですか?インストールしたライブラリにリンクするにはどうすればよいですか?

6
Daniel Standage

/etc/ld.so.confは、動的リンカー、つまり実行時にライブラリが検索される場所にのみ影響します。実行可能ファイルをビルドするときに重要なのは、ldがライブラリを探すパスです。これらを指定する通常の方法は、-Lオプションを渡すことです。ほとんどのconfigureスクリプトには、追加の-Lオプションを渡す方法があります。通常、ldのデフォルトの検索パスを変更する方法はありません。 gcc仕様ファイルの変更を検討するかもしれませんが、それには/usrの下ではなく/etcの下のファイルを変更する必要があります。

少し厄介な設定を考えると、/mnt/usrユニオンマウント を調べたい場合があります。 CentOSが提供するユニオンマウントの可能性があればわかりません(もちろん、ネイティブまたはFuseベースのサードパーティオプションがあります)。

ldconfig -vを使用して、ldconfigが新しいライブラリを認識しているかどうかを確認できます。そのメッセージ/usr/bin/ld: cannot find -lgenometoolsは、コンパイルプログラムのリンク段階にあると思いませんか。次に、-L/mnt/libパラメータを使用してライブラリを見つける可能性のあるリンカに言う必要があります。

1
Jan Marek