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

nic*_*ico 2 python lua interpreted-language shared-libraries libraries

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

测试.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"
Run Code Online (Sandbox Code Playgroud)

输出

Welcome to LUA
_VERSION = Lua 5.1
Load pass
Run Code Online (Sandbox Code Playgroud)

当我使用

lld ./lua
# or
lld ./lua test.lua
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

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
Run Code Online (Sandbox Code Playgroud)

显然,torch nn 使用的库这里没有显示。我们只看到“lua”程序所需的库

如果制作test.lua一个可执行文件并运行ldd ./test.lua,我会得到以下输出

ldd ./test.lua 
    not a dynamic executable
Run Code Online (Sandbox Code Playgroud)

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

yug*_*ugr 5

您可以使用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
Run Code Online (Sandbox Code Playgroud)

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