• 在linux中执行程序时,有时会遇到“error while loading shared libraries”这种谬误,这是因为动静链接器ld无奈找到程序启动须要的动静库。这时就须要设置动静库的搜寻门路了。
  • 动静链接器ld搜寻门路的程序以及如何设置:

    1. ELF文件中Dynamic Section段的DT_RPATH设置的门路。例如,能够在编译时增加链接参数“-Wl,--rpath,./lib”来指定搜寻./lib。
    2. 环境变量LD_LIBRARY_PATH设置的门路。
    3. ELF文件中Dynamic section段的DT_RUNPATH设置的门路。应用形式与1相似,须要增加–enable-new-dtags参数。例如,链接参数为“-Wl,--rpath,./lib,--enable-new-dtags”,则是指定DT_RUNPATH为./lib。因为DT_RUNPATH存在,则DT_RPATH会被疏忽。
    4. /etc/ld.so.cache中缓存的动静库搜寻门路。能够通过批改配置文件/etc/ld.so.conf 增删门路(批改后须要运行ldconfig命令)。
    5. 默认的/lib/和/usr/lib/。如果链接时指定-z nodefaultlib,这个默认门路将被疏忽。
  • PS:能够应用“readelf -d”查看Dynamic Section段。
  • PPS:如果只想对特定的app起作用的话,通过设置DT_RPATH或者DT_RUNPATH来指定搜寻门路是一个较优的形式。