可以看看这篇文章:linux 动态链接库的加载顺序
编译程序时链接 so 库顺序如下:
-
gcc 编译时参数 -L 指定的路径
gcc -o demux demuxing_decoding.c -L /usr/local/lib -lavcodec -lavformat -lavutil
-
环境变量 LIBRARY_PATH
export LIBRARY_PATH=LIBDIR1:LIBDIR2:$LIBRARY_PATH
-
系统默认库位置 /lib,/usr/lib
程序运行时查找 so 库顺序如下:
-
gcc 编译时指定的运行时库路径 -Wl,-rpath
-
环境变量 LD_LIBRARY_PATH
export LD_LIBRARY_PATH=LIBDIR1:LIBDIR2:$LD_LIBRARY_PATH
-
ldconfig 缓存 /etc/ld.so.cache
vim /etc/ld.so.cache
-
系统默认库位置 /lib,/usr/lib
通过下面这条指令可以查看 gcc 的 LIBRARY_PATH 和 INCLUDE 路径
echo 'main(){}' | gcc -E -v -
如果在 ~/.bashrc 中添加了 LIBRARY_PATH 路径,使用
source ~/.bashrc
后即可生效,加入到 gcc 的 LIBRARY_PATH 中。如果想取消这条路径,在 ~/.bashrc 中注释径后,再重启即可。