问题描述
Lua 的 ffi.load("library")
导致 cannot open shared object file: No such file or directory
错误。
作为临时解决方案,我可以提供库的绝对或相对路径。
例如。 ffi.load("./liblibrary.so")
。
我了解到需要设置 LUA_PATH
和 LUA_CPATH
。
例如:
export LUA_PATH="$PWD/src/?.lua"
export LUA_CPATH="$PWD/lib/?.so"
设置 LUA_PATH
使我能够“要求”来自其他目录的 lua 文件,但 LUA_CPATH
似乎对加载共享对象没有帮助。
解决方法
ffi.load
使用操作系统的正常 dlopen
机制。
在 Linux 上,这意味着您需要将库路径添加到 LD_LIBRARY_PATH
变量中。
一旦设置了 LD_LIBRARY_PATH
,Lua 就能够找到库。
我发现 this answer 通过在 LD_LIBRARY_PATH
上打印任何匹配的库来帮助我调试我的情况。