Lua ffi.load 找不到没有绝对路径的库

问题描述

Lua 的 ffi.load("library") 导致 cannot open shared object file: No such file or directory 错误

作为临时解决方案,我可以提供库的绝对或相对路径。 例如。 ffi.load("./liblibrary.so")

我了解到需要设置 LUA_PATHLUA_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 上打印任何匹配的库来帮助我调试我的情况。

Relevant FFI documentation