Skip to main content
 首页 » 编程设计

python之当我运行解释语言二进制文件及其脚本时,如何检查链接了哪些共享库

2025年05月04日29bluestorm

我试图找到运行需要 torch 库的 lua 脚本实际需要的每个库

test.lua:

#!/usr/bin/env lua 
 
print "Welcome to LUA" 
print('_VERSION = ' .. _VERSION) 
require("nn") -- this loads torch nn libraries to be further used in the code 
print "Load pass" 

输出:

Welcome to LUA 
_VERSION = Lua 5.1 
Load pass 

当我使用

lld ./lua 
# or 
lld ./lua test.lua 

我得到以下输出:

ldd ./lua ../../../bin/test.lua 
    linux-vdso.so.1 =>  (0x00007ffdba77d000) 
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f160dd3e000) 
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f160db3a000) 
    libreadline.so.6 => /lib/x86_64-linux-gnu/libreadline.so.6 (0x00007f160d8f3000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f160d52a000) 
    /lib64/ld-linux-x86-64.so.2 (0x00005580e2ebd000) 
    libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f160d301000) 
../../../bin/test.lua: 
    not a dynamic executable 

显然这里不展示torch nn使用的库。我们只看到“lua”程序必需的库

如果将 test.lua 设为可执行文件并运行 ldd ./test.lua,我将得到以下输出

ldd ./test.lua  
    not a dynamic executable 

当我运行解释语言二进制文件及其脚本时,如何检查链接了哪些库(或 .so)? (在 Lua 和 Python 中)

请您参考如下方法:

您可以使用LD_DEBUG:

$ LD_DEBUG=all python tmp.py 2>&1 | grep 'generating link map' 
3358:   file=libpthread.so.0 [0];  generating link map 
3358:   file=libc.so.6 [0];  generating link map 
3358:   file=libdl.so.2 [0];  generating link map 
3358:   file=libutil.so.1 [0];  generating link map 
3358:   file=libz.so.1 [0];  generating link map 
3358:   file=libm.so.6 [0];  generating link map 

请记住,如果您的应用仅在特定事件时加载库,您可能在默认运行期间看不到它。