2016/01/05
LD_LIBRARY_PATH を設定しても反映されないことがある
システム全体でライブラリパスを指定したかったので、
/etc/environment
に以下を追記したのですが反映されませんでした 。/etc/environment
LD_LIBRARY_PATH=/usr/local/hoge/lib
LD_LIBRARY_PATH の設定が反映されないファイルがある
調べてみると、大分前からそういう仕様だそうです 。LD_LIBRARY_PATH についての説明から抜粋
Note: You can only set this environment variable inside an interactive shell. Since Ubuntu 9.04 Jaunty Jackalope, LD_LIBRARY_PATH cannot be set in $HOME/.profile, /etc/profile, nor /etc/environment files. You must use /etc/ld.so.conf.d/*.conf configuration files. See Launchpad bug #366728 for more information.
(意訳)
この環境変数はインタラクティブシェルの中でのみ設定できます。Ubuntu 9.04 以降では、LD_LIBRARY_PATH を $HOME/.profile, /etc/profile, /etc/environment の中で設定することは出来ません。 /etc/ld.so.conf.d/*.conf の中で設定する必要があります。さらに詳しい情報は Launchpad bug #366728 を参照してください。
というわけで、以下のファイルに
LD_LIBRARY_PATH
を記述しても反映されません。- $HOME/.profile
- /etc/profile
- /etc/environment
解決方法1: システム全体で使いたい場合
/etc/ld.so.conf.d
以下に新たなファイルを作り、各行にライブラリパスを追加します。/etc/ld.so.conf.d/hoge.conf
# コメントも書けます /usr/local/hoge/lib /usr/local/hoge/share/lib
/etc/ld.so.cache
を再構築するため、以下を実行します。$ sudo ldconfig
ビルドしてみると、リンクが通るはずです。
ただ、この状態で
LD_LIBRARY_PATH
環境変数を見てみても、先ほどのパスは追加されていません。その代わり、以下のようにリンクされるライブラリのリストを取得することができます。
$ ldconfig -p 1418 libs found in cache `/etc/ld.so.cache' libzinnia.so.0 (libc6,x86-64) => /usr/lib/libzinnia.so.0 libzephyr.so.4 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libzephyr.so.4 libzeitgeist-2.0.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libzeitgeist-2.0.so.0 libzeitgeist-1.0.so.1 (libc6,x86-64) => /usr/lib/libzeitgeist-1.0.so.1 libz.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libz.so.1 libz.so.1 (libc6) => /usr/lib32/libz.so.1 ...
解決方法2: 特定ユーザの設定ファイルに記述する
特定のユーザだけが使いたいのであれば、$HOME/.bashrc
等、インタラクティブシェルにのみ反映されるようなファイルに記述すればオーケーです。
0 件のコメント:
コメントを投稿