我正在寻找每个实际需要运行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中)
发布于 2016-11-28 18:37:19
您可以使用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请记住,如果应用程序只在特定事件上加载库,则在默认运行期间可能看不到它。
发布于 2016-11-28 17:41:38
很可能Lua正在动态加载nn。它在nn中寻找LUA_CPATH或package.cpath。
找到需要哪些库的一种方法是重新定义require
local real_require=require
function require(x)
print(x,package.searchpath(x,package.cpath))
return real_require(x)
endhttps://stackoverflow.com/questions/40850187
复制相似问题