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

确定跨linux平台加载哪个共享库的可靠方法是什么?,linux,bash,scripting,shared-libraries,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 这是一个由两部分组成的问题: 这会产生跨平台的可靠结果吗? 有没有更巧妙的方法来解析ldconfig的输出? 谢谢, Paul根据具体操作

我需要找出从/sbin/ldconfig返回的信息中给出的要加载的库。我得出了以下结论:

#!/bin/bash
echo $(dirname $(/sbin/ldconfig -p | awk "/$1/ {print \$4}" | head -n 1))
使用以下命令运行此结果:

$ whichlib libGL.so
/usr/X11R6/lib
这是一个由两部分组成的问题:

这会产生跨平台的可靠结果吗? 有没有更巧妙的方法来解析ldconfig的输出? 谢谢,
Paul

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

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

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

它更精确一点,少了一根管子。echo$cmd也是多余的;您只需编写cmd即可。

可执行文件加载库的方式有几种: 一,

使用$LD_库_路径 使用ld缓存 具有编译为二进制的完整路径的库-rpath gcc标志
您正在使用选项2,而不考虑选项1和3。

您的版本不接受命令行参数。在OP中,$1是Bash参数,\$4是awk字段。在您的示例中,$1和$4都是awk字段,搜索的库是硬编码的。哦,您是对的。我在命令行上测试时硬编码了它。只是提醒一下,不要在不受信任的代码上使用ldd:为什么不使用ldd?它总是向您展示如何将流程链接在一起。我使用它作为输入来设置我的LD_LIBRARY_路径。该程序尚未生成,因此我无法使用ldd。