libfooが含まれているとします/usr/lib/x86_64-linux-gnu/
。
libfoo.so.2
->libfoo.so.2.0.0
(シンボリックリンク)libfoo.so.2.0.0
特に抜けたのはlibfoo.so
。
/usr/local/bin/sillyprog
このようなものを使うプログラムがあるとしましょうgcc somefile.c -lfoo
。それを使用しようとするたびにそれがないのでsillyprog
失敗します。/usr/bin/ld: cannot find -lfoo
libfoo.so
その中にあるファイルを編集する権限がないと仮定すると、実行時に/usr
libfooを正常に関連付けるためにどのような回避策を使用できますかsillyprog
?
答え1
1つのオプションは、制御するディレクトリに正しい名前を持つライブラリへのリンクを作成することです。その後、LIBRARY_PATH
環境LD_LIBRARY_PATH
変数を使用してこのディレクトリを指すことができます。これらの変数は、プログラムをコンパイルまたは実行するときにリンカとローダがそれぞれライブラリを見つける場所に影響します。 ~によるとGCCドキュメント:
値は
LIBRARY_PATH
、同様にコロンで区切られたディレクトリのリストですPATH
。デフォルトのコンパイラとして設定されている場合、GCCは特別なリンカファイルを検索するときにGCC_EXEC_PREFIX
GCCとリンクするときにこれらのディレクトリを検索するときに指定されたディレクトリを試みます。通常のライブラリオプションを使用する場合も使用されます-l
(ただし、指定されたディレクトリを-L
最初に使用します)。
したがって、次のようになります。
mkdir -p ~/.local/lib
ln -s /usr/lib/x86_64-linux-gnu/libfoo.so.2 ~/.local/lib/libfoo.so
その後、コンパイルに使用されたプログラムを実行しますlibfoo.so
。
LIBRARY_PATH=~/.local/lib sillyprog
または、独自にリンクされたプログラムを実行してくださいlibfoo.so
。
LD_LIBRARY_PATH=~/.local/lib sillyprog