Symbol not found: OpenSSL_version_num

我正在尝试创建一个Kong插件。当作为kong服务器的一部分运行时,它运行得很好,但是当我尝试使用busted编写一些单元测试时,resty.openssl.digest函数加载失败。更具体地说,加载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
点赞
用户1847592
用户1847592

在使用库函数前,你应该使用 ffi.load 加载 .so 库。

local ffi = require("ffi")
ffi.cdef"long SSLeay(void);"  -- 我有版本 1.0
ffi.load("ssl", true)
print(ffi.C.SSLeay())  --> 268439887LL

注意:

package.cpath 仅用于 require()

它不会影响 FFI 函数。

2021-04-24 23:03:17