luajit笔记---编译成静态库以及FFI绑定宿主程序函数
来源:互联网 发布:酒店网络方案 编辑:程序博客网 时间:2024/05/20 18:45
local ffi = require("ffi")ffi.cdef[[ typedef struct { uint8_t id; char * name; } stuInfo;]]--新建一个结构体local n = 1local stu = ffi.new("stuInfo[?]", n)--新建变长的结构体变量for i=0, n-1 do stu[i].id = 1; local name = "zhao"; local ptr=ffi.cast("char *", name);--将lua中字符串转换为c的`char *` stu[i].name = ptr;endprint(stu[0].id);local myname = ffi.string(stu[0].name);--将c中`char *`类型转换为lua的字符串print(myname);
http://blog.csdn.net/fg5823820/article/details/8888207
本以为可以像lua一样把代码丢进去直接编译就好了,结果发现luajit有一堆汇编代码,不知道怎么处理,后来一搜索才知道luajit本身提高的批处理也可以编译成静态库,就是在后面加个static,郁闷到了。http://blog.csdn.net/whitehack/article/details/6451293
Google来Google,终于看到用FFI绑定宿主程序函数的例子,卧槽,知道真相我的眼泪都流下来!原来FFI本质是绑定导出的符号,所以说只要导出符号就可以用,吐血。
- #include <lua.hpp>
- #include <cassert>
- // Please note that despite the fact that we build this code as a regular
- // executable (exe), we still use __declspec(dllexport) to export
- // symbols. Without doing that FFI wouldn't be able to locate them!
- extern "C"
- {
- __declspec(dllexport) void __cdecl hello_from_lua(const char *msg)
- {
- printf("A message from LUA: %s\n", msg);
- }
- __declspec(dllexport) int Add(int a,int b)
- {
- return a+b;
- }
- }
- const char *lua_code =
- "local ffi = require('ffi') \n"
- "ffi.cdef[[ \n"
- "const char * hello_from_lua(const char *); \n" // matches the C prototype
- "int Add(int,int);"
- "]] \n"
- "ffi.C.hello_from_lua('Hello from LUA!') \n" // do actual C call
- "sum = ffi.C.Add(10,20) \n"
- "print('sum:'..sum) \n"
- ;
- int main()
- {
- lua_State *lua = luaL_newstate();
- assert(lua);
- luaL_openlibs(lua);
- const int status = luaL_dostring(lua, lua_code);
- if(status)
- printf("Couldn't execute LUA code: %s\n", lua_tostring(lua, -1));
- lua_close(lua);
- return 0;
- }
另外发现,就算是导出了符号,FFI也只能对本程序的导出符号进行绑定,比如我在一个DLL里面导出了符号,虽然宿主程序使用了这个DLL,但是依然没法绑定。
后来看了luajit官网,发现lua51.dll里面的函数在FFI是可用的,至于他们怎么做到我就不清楚了,只能说有可能可以做到这一点。这种黑科技果然不是那么热就能掌握的,而且关于luajit,感觉资料实在太少了,说实在其实lua 的资料本身就少了
0 0
- luajit笔记---编译成静态库以及FFI绑定宿主程序函数
- luajit笔记---编译成静态库以及FFI绑定宿主程序函数
- luajit笔记---编译成静态库以及FFI绑定宿主程序函数
- luajit笔记---编译成静态库以及FFI绑定宿主程序函数
- luajit笔记---编译成静态库以及FFI绑定宿主程序函数
- Duilib编译成静态库
- Duilib编译成静态库
- LuaJIT FFI
- luajit ffi 访问C动态库
- 界面库Duilib编译成静态库
- AGG_002 编译成静态链接库
- 将UDT编译成静态LIB库
- (转)将DuiLib编译成静态库
- 将 vlfeat 编译成静态库
- 将nginx编译成静态库
- 编译成.a 文件 静态库
- ffmpeg android ndk 编译成静态库
- luajit笔记---luajit静态库依赖顺序问题
- 三大结构之选择----IF
- jsp基础及详细介绍(附带案例代码)
- iOS开发笔记--去掉tableview中section的headerview粘性
- pip安装使用详解
- 面试互联网企业Android开发工程师的一些面试题
- luajit笔记---编译成静态库以及FFI绑定宿主程序函数
- 基于netty的企业即时通讯系统的设计与实-离线消息处理
- 大数运算
- OTL Oracle
- eclispe中添加user Library和向工程添加user library库
- 常用RAID级别原理和Linux中软RAID实现方式
- hibernate配置
- java
- 【Android常用控件】Toast的几种效果实现(附源码)