
ソースからzeromq 3.2.5をインストールしました。
$ wget http://download.zeromq.org/zeromq-3.2.5.tar.gz
$ tar xf zeromq-3.2.5.tar.gz
$ cd zeromq-3.2.5
$ ./configure && make -j4
$ sudo make install
libzmq.so.3
次の場所にインストールされます/usr/local/lib
。
$ sudo updatedb
$ locate libzmq.so.3
/usr/local/lib/libzmq.so.3 /usr/local/lib/libzmq.so.3.0.0
検索パス/usr/local/lib
にあることを確認しました。ld
$ grep /usr/local/lib /etc/ld.so.conf.d/*
/etc/ld.so.conf.d/libc.conf:/usr/local/lib
ld
ライブラリが見つかることを確認しました。
$ ldconfig -v 2>/dev/null | egrep -e zmq\|^/
... /usr/local/lib: libzmq.so.3 -> libzmq.so.3.0.0 ...
しかし、私のアプリを起動すると見つかりませldd
ん。libzmq.so.3
$ ldd test_app
... libzmq.so.3 => not found ...
私が設定するとLD_LIBRARY_PATH
動作します。
$ export LD_LIBRARY_PATH=/usr/local/lib
$ ldd test_app
... libzmq.so.3 => /usr/local/lib/libzmq.so.3 (0x00007f22418d9000) ...
質問:
- なぜ標準パスに見つかりませんか
ld
?libzmq.so.3
LD_LIBRARY_PATH
- 設定せずにこの問題を解決するにはどうすればよいですか
LD_LIBRARY_PATH
?
メモ:
RPATH
重要な場合に備えてバイナリに設定してください。
$ readelf -a test_app | grep RPATH
0x000000000000000f (RPATH) Library rpath: [/home/steve/src/.../bin/gcc-4.9.3/debug]
役に立つかどうかUbuntu 14.04を実行しています。
答え1
システムディレクトリに新しいライブラリを追加するときは、次のようにリンカキャッシュをフラッシュする必要があります。
ldconfig
として実行する必要がありますroot
。
このコマンドがないと、ランタイムリンカーはどのライブラリを使用できるかについての古いアイデアを持っています。
システムリンカーパスに新しいディレクトリを追加することにした場合でも、これを行う必要があります。
設定すると、LD_LIBRARY_PATH
ランタイムリンカーはキャッシュの外部でこのディレクトリを手動で検索します。