假设/usr/lib/x86_64-linux-gnu/
包含 libfoo:
libfoo.so.2
->libfoo.so.2.0.0
(符号链接)libfoo.so.2.0.0
值得注意的是libfoo.so
.
假设有一个程序/usr/local/bin/sillyprog
使用类似gcc somefile.c -lfoo
. 每次我尝试使用sillyprog
时,它都会失败,/usr/bin/ld: cannot find -lfoo
因为libfoo.so
缺少。
假设我无权编辑其中的任何文件/usr
,我可以使用哪些变通方法在运行时成功链接 libfoo sillyprog
?
一种选择是在您控制的目录中创建一个指向库的正确名称的链接。然后你可以使用
LIBRARY_PATH
和LD_LIBRARY_PATH
环境变量来指向这个目录。这些变量分别影响链接器和加载器在编译或运行程序时查找库的位置。根据GCC 文档:所以,像:
然后,运行一个
libfoo.so
用于编译的程序:或者运行一个本身链接到的程序
libfoo.so
: