infinibandrdmacmライブラリrdmacm.soを使用するプログラムがあります
1台のコンピューター(Ubuntuサーバー)で問題なく実行できます。私の開発用PC(Ubuntuデスクトップ版)では、次のようになります。
./test-client rdmacm.so:共有オブジェクトファイルを開くことができません:そのようなファイルまたはディレクトリはありません
ここで私は困惑します。
lddrdma-クライアント
linux-vdso.so.1 => (0x00007fffdb62b000)
libibverbs.so.1 => /usr/lib/libibverbs.so.1 (0x00007f97ca007000)
librdmacm.so.1 => /usr/lib/librdmacm.so.1 (0x00007f97c9dfe000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f97c9a3e000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f97c9821000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f97c961d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f97ca237000)
猫/etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf
cat /etc/ld.so.conf.d/*.conf
# Multiarch support
/lib/i386-linux-gnu
/usr/lib/i386-linux-gnu
/lib/i686-linux-gnu
/usr/lib/i686-linux-gnu
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/lib/fglrx
/usr/lib32/fglrx
# Legacy biarch compatibility support
/lib32
/usr/lib32
ls -l / usr / lib / librdmacm *
-rw-r--r-- 1 root root 41146 Jul 19 2011 /usr/lib/librdmacm.a
lrwxrwxrwx 1 root root 18 Jul 19 2011 /usr/lib/librdmacm.so -> librdmacm.so.1.0.0
lrwxrwxrwx 1 root root 18 Jul 19 2011 /usr/lib/librdmacm.so.1 -> librdmacm.so.1.0.0
-rw-r--r-- 1 root root 35248 Jul 19 2011 /usr/lib/librdmacm.so.1.0.0
すべてが正しく見えます。test-clientを実行できないのはなぜですか。
編集
私が使用しているコードは、geekinthecornerブログからのものです。Infinibandテストアプリ。
クライアントでは、いくつかのdlopen呼び出しがあります。
すなわち
void *handle = dlopen("rdmacm.so", RTLD_LAZY);
...
handle = dlopen("ibverbs.so", RTLD_LAZY);
これはubuntuサーバーで動作します。ただし、私の開発用デスクトップマシンでは、ライブラリが見つかりません。
ライブラリの名前をこのように変更すると
void *handle = dlopen("librdmacm.so", RTLD_LAZY);
...
handle = dlopen("libibverbs.so", RTLD_LAZY);
それらが見つかりました。dlopenは自動的に「lib」を付加しませんか?ライブラリはこれなしで見つかるので、私はそうだと思います。それは私のサーバーに当てはまるはずです。
いずれにせよ、これらのdlopen呼び出しが必要かどうかはわかりません。それらを完全に削除することができ、プログラムは動作します。しかし、パスと/etc/ld.so.confセットアップに同じ検索パスが含まれている場合、2台のマシンでdlopenのパフォーマンスが異なる理由について知りたいと思います。