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