CやC++で作ったプロジェクトだとsoファイルを読む込む関係から、lddコマンドという子を使って依存関係を調べる事ができます。
実際のところ
$ ./example_walk ./example_walk: error while loading shared libraries: liblcm.so.1: cannot open shared object file: No such file or directory
ためしにlddコマンドをみると、確かにliblcm.so.1がリンクしていません。
$ ldd example_walk
linux-vdso.so.1 (0x00007fffc2fb7000)
libunitree_legged_sdk_amd64.so => /home/shuzo/unitree_legged_sdk/lib/libunitree_legged_sdk_amd64.so (0x00007f9700b30000)
liblcm.so.1 => not found
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9700940000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f9700920000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9700720000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f97005d1000)PATHに通せばと思ったものの、上手くいかず。
ビルドしてるプロジェクトのlibフォルダに直接ブチ込むという荒治療。
$ cp ~/lcm-1.4.0/build/lcm/liblcm.so.1 ~/unitree_legged_sdk/lib/
$ ldd example_walk
linux-vdso.so.1 (0x00007fffd51ce000)
libunitree_legged_sdk_amd64.so => /home/shuzo/unitree_legged_sdk/lib/libunitree_legged_sdk_amd64.so (0x00007fdf4d1f0000)
liblcm.so.1 => /home/shuzo/unitree_legged_sdk/lib/liblcm.so.1 (0x00007fdf4d1d0000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fdf4cfe0000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fdf4cfc0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdf4cdc0000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdf4cc71000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fdf4cb30000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fdf4cb0d000)
/lib64/ld-linux-x86-64.so.2 (0x00007fdf4d416000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fdf4ca90000)終わった後改めて調べたところ、lddの”標準的な場所”は以下の順で解決されるとのこと
‐ LD_LIBRARY_PATH (a.out プログラムでは LD_AOUT_LIBRARY_PATH)
- キャッシュファイル /etc/ld.so.cache
- デフォルトパスである /usr/lib、 次いで /lib。
今回の場合、liblcm.so.1 はLD_LIBRARY_PATHないし/usr/libに置けばよかったみたい。
参考もと
- man ldd
- Man page of ld.so