因为是使用lua库函数,所以需要库路径和头文件路径、指定链接的库名 Linux+gcc:上面这些操作在Linux会省事很多,因为Linux在安装已经放在gcc的搜索路径下了,这部分不用做了,我们只需要指明链接的库名,Linux在生成可执行文件的时候需要类似这样 gcc main.c -o main -llua -lm -ldl,要链接m和dl库,这个是很重要的...
require("alien_c")require("alien") 通过alien调用c库的方法: alien = require("alien_c") --1.加载alienlibc = alien.load("*.so") -- 2.加载动态链接库so,dll都可以libc.hello:types("string","string") -- 3.说明参数类型:例如输入一个json,返回一个jsonin_json=""out_json="ret"out_json=...
static const rotable_Reg exa[] = //exa[]就是你的自定义库名字 { {"jiaFa", l_jiaFa, 0}, //第一个是lua要调用的函数名字,第二个是对应的c函数,第三个是lua_Integer值,一般写0 {NULL, NULL, 0}}; //结尾要有这一行,代表没有其他的函数了 LUAMOD_API int luaopen_exa(lua_State *L) //...
defined(lua_getlocaledecpoint)#define lua_getlocaledecpoint() '.'//我们这里需要本地化的小数点字符,统一使用标准的.#endif 编译动态库的CMakeLists.txt编写的坑 Lua源码中,提供两个main函数: lua.c的main是编译运行时用的 luac.c的main是编译一个将lua代码编译成EXE用的 我们只需需要保留一个main函数,...
C库注册函数 函数介绍 int luaL_newmetatable (lua_State *L, const char *tname); 和lua_newtable类似, 也是用来生成一个指定名字的表, 但是只有前者能够作为userdata的metatable void lua_setfield (lua_State *L, int index, const char *k); ...
首先总结静态库的编译步骤。 1 先基于.cpp或者.c文件生成对应的.o文件 2将几个.o文件 使用ar -cr命令 生成libname.a文件 libname.a 为静态库, name 为静态库的名字, 可以根据模块功能命名。 举个例子 在当前目录下,有一个mymethod.h文件 在mymethod.cpp里实现这两个函数 ...
Lua可以调用C函数的能力将极大的提高Lua的可扩展性和可用性。对于有些和操作系统相关的功能,或者是对效率要求较高的模块,我们完全可以通过C函数来实现,之后再通过Lua调用指定的C函数。对于那些可被Lua调用的C函数而言,其接口必须遵循Lua要求的形式,即typedef int (*lua_CFunction)(lua_State* L)。简单说明一下,...
lua结合c/c++ 示例 lua调用c动态库 示例 lua调用c++动态库 示例 lua部分 #!/bin/lua mystr="I'm lua" myTable={name="xiaoming",id=12345} function print_h
在基于nginx做waf开发时,nginx+lua+c动态库是常见的开发模式,在lua生态无法满足需求时,就需要我们在lua代码中调用动态库的方式,进行扩展,下面以lua调用c语言+openssl动态库的方式,进行判断证书的创建时间和证书的过期时间为例,进行说明
这里给出lua_CFunction的类型: typedef int (*lua_CFunction) (lua_State *L); 可以看到它是一个函数指针,可以用于参数是lua_State*而返回值是int的函数。 显然,我们压入栈的C函数的参数和返回值类型是严格受限的。 void lua_setglobal (lua_State *L, const char *name); ...