找出库是否在路径中

nbu*_*bis 20 linux dynamic-linking ld

假设我想测试一个库是否已安装并可由程序使用。我可以ldconfig -p | grep mylib用来确定它是否安装在系统上。但是如果图书馆只能通过设置知道LD_LIBRARY_PATH怎么办?

在这种情况下,程序可能能够找到库,但ldconfig不会。如何检查库是否在组合链接器路径中?

我要补充一点,我正在寻找一种解决方案,即使我手头实际上没有该程序(例如该程序尚未编译),我也正在寻找一种解决方案,我只想知道某个库存在于ld' s 路径。

lge*_*get 19

ldconfig 可以列出它可以访问的所有库。这些库也存储在其缓存中。

/sbin/ldconfig -v -N将抓取所有常用的库路径,列出所有可用的库,而不重建缓存(如果您是非 root 用户,这是不可能的)。它不考虑 LD_LIBRARY_PATH 中的库(与编辑前这篇文章所说的相反),但您可以使用以下行将其他库传递到命令行:

/sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH)
Run Code Online (Sandbox Code Playgroud)


gui*_*ini 5

您可以使用 gcc 编译一个简单的测试程序并链接您的库。然后你可以用ldd检查使用的库。我用这样的东西:

echo "int main(){}" | gcc -x c++ -Wl,--no-as-needed -lmylib - && ldd a.out | grep mylib
Run Code Online (Sandbox Code Playgroud)

-Wl,--no-as-needed防止链接器丢弃库,因为没有使用库中的符号。