问题描述
我正在尝试创建一个 kong 插件。作为 kong 服务器的一部分运行时效果很好,但是当我尝试使用 busted 编写一些单元测试时,resty.openssl.digest
func 加载失败。更具体地说,在加载 version.lua
我不确定我到底错过了什么。也许是一些应该将 openSSL 的 C 函数链接到 lua 的链接。
这是重现问题的最小片段。
package.cpath = package.cpath .. ';/usr/local/lib/lua/5.1/?.so'
local ffi = require("ffi")
ffi.cdef[[
// 1.0
unsigned long SSLeay(void);
const char *SSLeay_version(int t);
// >= 1.1
unsigned long OpenSSL_version_num();
const char *OpenSSL_version(int t);
// >= 3.0
const char *OPENSSL_info(int t);
// BoringSSL
int BORINGSSL_self_test(void);
]]
local num = ffi.C.OpenSSL_version_num()
print(num)
错误:
luajit: test.lua:18: Symbol not found: OpenSSL_version_num
stack traceback:
[C]: in function '__index'
test.lua:18: in main chunk
[C]: at 0x55b71c78ffa4
解决方法
在使用 .so 库中的函数之前,您应该ffi.load
。
local ffi = require("ffi")
ffi.cdef"long SSLeay(void);" -- I have ver 1.0
ffi.load("ssl",true)
print(ffi.C.SSLeay()) --> 268439887LL
注意:package.cpath
仅用于 require()
。
不影响 FFI 功能。