Torch 7/Lua不能require一个.so文件,但package.loadlib()可以

当我在运行Torch 7代码时遇到了一个问题。我有一个共享库libhashnn.so文件,我想在Torch 7脚本中加载该文件中的函数,所以我使用了这个表达式:require 'libhashnn',但是trepl报错了。

但是,如果我使用package.loadlib函数,它是可以正常工作的。这里是结果,但我不知道为什么我不能使用require,我怎么才能使用require成功地加载lib呢?

require'libhashnn'
/home/dazhen/torch/install/share/lua/5.1/trepl/init.lua:383: bad argument #1 to '?' (table expected, got string)
stack traceback:
    [C]: in function 'error'
    /home/dazhen/torch/install/share/lua/5.1/trepl/init.lua:383: in function 'require'
    [string "_RESULT={require'libhashnn'}"]:1: in main chunk
    [C]: in function 'xpcall'
    /home/dazhen/torch/install/share/lua/5.1/trepl/init.lua:650: in function 'repl'
    ...zhen/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:199: in main chunk

f=package.loadlib('libhashnn.so' ,'luaopen_libhashnn')
[0.0195s]
th> f
function: 0x41630f38

点赞
用户436275
用户436275

尝试调用package.loadlib给你的函数。我敢打赌你将得到与使用require时相同的错误。

为了理解为什么:require相当于执行package.loadlib,然后调用该函数以便要加载的模块可以初始化自身。仅仅使用package.loadlib,这个初始化是无法完成的,因此在初始化过程中发生的错误不会显示出来。

我不知道hashnn是什么,所以我无法告诉你它为什么失效,但看一下/home/dazhen/torch/install/share/lua/5.1/trepl/init.lua第383行可能是找出问题的好方法。

2016-12-27 15:55:07