CentOSの非標準libディレクトリにあるldconfig関連の問題

CentOSの非標準libディレクトリにあるldconfig関連の問題

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

[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

...しかし、元の問題は実際には解決されません。ただダックテープソリューションです。最初は何が間違っていて、インストールされたライブラリにどのようにリンクしますか?

答え1

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

設定が少しぎこちないことを考えると、見たいと思うかもしれません。共同設置上。 CentOSがフェデレーションマウントの可能性を提供しているかどうかを/mnt知る/usr

答え2

ldconfig -vldconfig を使用して、新しいライブラリが既知であることを確認できます。私はそのメッセージが/usr/bin/ld: cannot find -lgenometoolsコンパイラの接続段階にあるふりをしています。そうではありませんか?その後、リンカーに-L/mnt/lib引数を使用してライブラリを見つけることができることを知らせる必要があります。

関連情報