实验(运行时)
g++ -c -fPIC -o libshow.o libshow.cpp
g++ -shared -o libshow.so libshow.o
g++ -Wall -o code main.cpp -L$(pwd) -lshow
./code
无法执行,提示找不到so。
LD_LIBRARY_PATH=$(pwd) ./code
可以执行.
拷贝libshow.so
到/usr/local/lib
,运行失败,ldd也提示失败。
即使运行了ldconfig, 也没有用。移动到/usr/lib
之后可以运行,也不可以运行,需要执行ldconfig
,才可以运行。
结论 (运行时)
- 说明即使so与可执行文件同一个目录,也不会搜索。
/usr/local/lib
不在默认搜索路径中。- 搜索顺序只有以下两个
LD_LIBRARY_PATH
/etc/ld.so.cache
(配置文件目录,/usr/lib
,/lib
)
ld.so.cache需要通过
ldconfig
进行手动刷新后才生效,有时候安装完软件需要执行ldconfig
也是这个原因。