lua - Mac OS X环境编译C模块
来源:互联网 发布:肯德基 麦当劳 知乎 编辑:程序博客网 时间:2024/06/01 09:28
我们已经看到如何在C文件中使用lua_register注册lua可以使用的函数,也了解了C函数和lua函数之间如何传递参数。再提升一步,我们还可以将一组C函数组成一个模块交给lua环境使用。看具体的例子:需要说明的是Mac OS X需要使用gcc将mylualib.c编译为动态库,编译选项不同于Linux。文件第1行的作用就是引用mylualib模块。
mylualib.c
点击(此处)折叠或打开
- #include <lua.h>
- #include <lauxlib.h>
- #include <lualib.h>
- static int hello_c (lua_State *L) {
- const char * from_lua = lua_tostring(L,1);
- printf("Lua: %s\n",from_lua);
- lua_pushstring(L,"Hi Lua, nice to meet you");
- return 1;
- }
- static const struct luaL_Reg mylualib [] = {
- {"hello_c", hello_c},
- {NULL, NULL} /* sentinel */
- };
- int luaopen_mylualib (lua_State *L) {
- luaL_newlib(L, mylualib); /* register a array of c functions exported to lua */
- lua_pushvalue(L, -1);
- lua_setglobal(L, "mylualib"); /* the module name */
- return 1;
- }
具体编译命令(粗体部分不同于Linux,如果不使用这些选项,liblua将会被编译到so文件中并引起“multiple lua vms detected”错误, bundle是Mac使用的文件格式):
gcc -c mylualib.c ; gcc -O2 -bundle -undefined dynamic_lookup -o mylualib.so mylualib.o
生成的mylualib.so就是可以在lua环境使用的模块。
再看一下lua脚本引用mylualib模块的的方法:
my.lua
点击(此处)折叠或打开
- require "mylualib"
- hi = mylualib.hello_c("Hi C, I'm Lua")
- print(hi)
最后看一下lua脚本执行的结果:
$ lua my.lua
Lua: Hi C, I'm Lua
Hi Lua, nice to meet you
[注明:lua版本是5.2.1]
0 0
- lua - Mac OS X环境编译C模块
- 和我一起写lua - Mac OS X环境编译C模块
- openJDK7 编译过程 ~ Mac OS X 环境
- mac os中编译lua
- Mac OS X下NDK环境的搭建及编译
- 在Mac OS X下搭建gtk编译环境
- lua 编译 C模块
- 在 Mac OS X 下编译 Objective-C 运行时
- Mac OS X编译SDL
- mac os x 编译hadoop
- COCOSDX2.2如何在Mac OS X 中运行Lua (Running Lua on Mac OS X)
- 如何在Mac OS X 中运行Lua (Running Lua on Mac OS X)
- 如何在Mac OS X 中运行Lua (Running Lua on Mac OS X)
- mac os X 下编译jrtplib
- Mac OS X下编译Android源码
- Mac OS X 下编译android源码
- MAC OS X下编译tesseract
- mac os X 下编译 chromium
- 事件onInterceptTouchEvent和onTouchEvent
- Win32汇编之使用资源--菜单和加速键
- double 的精度和,有效位数和表示范围
- 在lua中使用C语言编写的库
- 期待char*类型字符
- lua - Mac OS X环境编译C模块
- 从Samples中入门IOS开发(一)------ XCode上手
- remove the duplicate node from unsorted list
- UVA - 10098 Generating Fast (全排列)
- 请求被忽略
- (转)stm32F4-----DMA的FIFO作用和用法
- ore性质及其证明应用
- 请求被忽略
- OC中类和对象的创建和使用