找不到符号:OpenSSL_version_num

Symbol not found: OpenSSL_version_num

我正在尝试创建一个 kong 插件。当 运行 作为 kong 服务器的一部分但当我试图用 busted, resty.openssl.digest func load fails. More specifically while loading the version.lua

编写一些单元测试时它工作得很好

我不确定我到底错过了什么。也许一些 link 应该 link 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

在使用其中的函数之前,您应该ffi.load您的 .so 库。

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 功能。