您的位置:首页 > 运维架构

Openresty使用ffi调用.so

2016-05-15 00:00 351 查看
摘要: 需要使用Openresty调用一个.so动态链接库,这本来没有什么,只是这个动态链接库又依赖另一个链接库。。。

目的:

在Lua中调用动态链接库,传递参数为字符串,返回0成功,其他失败。

方法:

[code=plain]local ffi = require("ffi") -- 加载FFI

local hntv = ffi.load("hntv_crypt") -- 加载动态库,此库依赖curl

ffi.cdef[[
int verify_url(...); -- 定义要加载的方法
]]

local ret = hntv.verify_url("str1","str2") -- 调用

错误:

[code=plain]nginx: worker process: symbol lookup error: /usr/local/openresty/nginx/lua/libhntv_crypt.so: undefined symbol: curl_easy_init

原因:

需要加载libcurl

解决:

[code=plain]yum install libcurl-devel
yum install libcurl

Lua:

[code=plain]ffi.load("curl", true) -- 注意这个true!!!是加载到global里面的意思,这个尼玛坑了一天

最终代码:

[code=plain]local ffi = require("ffi")
ffi.load("curl", true)
local hntv = ffi.load("hntv_crypt")
ffi.cdef[[
int verify_url(...);
]]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: