系统 oE 24.03 LTS, cangjie 编译器(应该没有关系,已经到 elf 可执行程序了)。
编译生成可执行程序,我把库路径写入 rpath 字段,可由 chrpath 程序验证 (或 readelf -d
)
$ chrpath -l target/release/bin/tmcp
target/release/bin/tmcp: RPATH=./3rd-libs:./magic:/home/atoo/下载/cangjie-0.56.4/runtime/lib/linux_x86_64_llvm
关注其中的 3rd-libs, magic
两个目录,两者均为符号链接——应该也没有关系。
$ ldd target/release/bin/tmcp
linux-vdso.so.1 (0x00007ffe091f5000)
…………(略去)
libmagic.core.memory.so => ./magic/libmagic.core.memory.so (0x00007fe1b7b32000)
libsqlite3.so.0 => /usr/lib64/libsqlite3.so.0 (0x00007fe1b755e000)
libfaiss_c.so => ./3rd-libs/libfaiss_c.so (0x00007fe1b9cc4000) #「找到了」
libsecurec.so => /home/atoo/下载/cangjie-0.56.4/runtime/lib/linux_x86_64_llvm/libsecurec.so (0x00007fe1bac7d000)
libm.so.6 => /usr/lib64/libm.so.6 (0x00007fe1b737c000)
libfaiss.so => not found # 「找不到!!!!!!」
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fe1b6e00000)
libgcc_s.so.1 => /usr/lib64/libgcc_s.so.1 (0x00007fe1b9c8a000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe1bb8e9000)
$ ls -l 3rd-libs/*so
-rw-r--r--. 1 atoo atoo 270008 6月10日 16:15 3rd-libs/libfaiss_c.so
-rwxr-xr-x. 1 atoo atoo 8215144 6月10日 16:15 3rd-libs/libfaiss.so #「特意增加了权限位 chmod a+x 」
-rw-r--r--. 1 atoo atoo 132 6月10日 14:52 3rd-libs/libsqlite.so
改设置环境变量,可以了,如下:
$ LD_LIBRARY_PATH=./3rd-libs ldd target/release/bin/tmcp
linux-vdso.so.1 (0x00007ffdee7da000)
…………
libsqlite3.so.0 => /usr/lib64/libsqlite3.so.0 (0x00007f112bc90000)
libfaiss_c.so => ./3rd-libs/libfaiss_c.so (0x00007f112e446000)
libsecurec.so => /home/atoo/下载/cangjie-0.56.4/runtime/lib/linux_x86_64_llvm/libsecurec.so (0x00007f112f26a000)
libm.so.6 => /usr/lib64/libm.so.6 (0x00007f112baae000)
libc.so.6 => /usr/lib64/libc.so.6 (0x00007f112b8d5000)
libz.so.1 => /usr/lib64/libz.so.1 (0x00007f112d64f000)
libfaiss.so => ./3rd-libs/libfaiss.so (0x00007f112b200000) #「这个也能找到了。为何?!!!」
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f112ae00000)
libgcc_s.so.1 => /usr/lib64/libgcc_s.so.1 (0x00007f112d62f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f112fff0000)
………… (略去其他)
这个目录( ./3rd-libs ) 为何必须设置在 LD_LIBRARY_PATH
方可呢?