什么是确定在Linux平台上加载哪个共享库的可靠方法?

时间:2010-02-25 20:13:33

标签: linux bash scripting shared-libraries

我需要找出从/ sbin / ldconfig返回的信息中加载的库。我想出了以下内容:

#!/bin/bash
echo $(dirname $(/sbin/ldconfig -p | awk "/$1/ {print \$4}" | head -n 1))

运行此结果:

$ whichlib libGL.so
/usr/X11R6/lib

这是一个由两部分组成的问题:

  1. 这会在平台上产生可靠的结果吗?
  2. 是否有更灵巧的方法来解析ldconfig的输出?
  3. 谢谢, 保罗

2 个答案:

答案 0 :(得分:0)

根据您的具体操作,您可能希望直接在您计划运行的可执行文件上运行ldd,而不是一般案例ldconfig

既然你问过,你可以这样编写你的脚本:

dirname "$(/sbin/ldconfig -p | awk "\$1 == "$1" {print \$4; exit}")"

它更精确,管道更少。 echo $(cmd)也是多余的;你可以写cmd

答案 1 :(得分:0)

可执行程序可以通过多种方式加载库:  1。

  1. 使用$ LD_LIBRARY_PATH
  2. 使用ld cache
  3. 将完整路径编译为二进制的Libary(-rpath gcc flag)
  4. 您正在使用选项2,而不考虑选项1和3.