Luajit 2.0.4 绑定 protoc-gen-lua (Windows 平台)
来源:互联网 发布:淘宝网服饰长款线裙 编辑:程序博客网 时间:2024/03/29 05:02
上一篇 protoc-gen-lua 编译、安装、使用教程 介绍了 protoc-gen-lua 的编译使用介绍,但是最后的例子,我是把 protoc-gen-lua 的 pb.c 源代码添加到工程中去进行编译的。那如果我们写了 lua 代码想直接用 lua 命令测试呢?这时候总不能每次都拿 vs 的工程来编译运行,好在我们有 Luajit 2.0.4 的源代码 和 protoc-gen-lua 中 pb.c 的源代码,代码在手天下我有,我来把这两个整合到一起,即把 protoc-gen-lua 的 pb.c 编译到 Luajit 2.0.4 中。
首先下载安装 Luajit 2.0.4 ,然后解压、编译。具体过程请看上一篇 。
然后下载安装 protobuf-2.4.1,然后解压、编译。具体过程请看上一篇。
然后下载安装 protoc-gen-lua ,然后解压、编译、具体过程请看上一篇。
转自 http://blog.csdn.net/huutu http://www.thisisgame.com.cn
说这么多就是说 看完上一篇 再来看这一篇……
Luajit 2.0.4 的编译是在 LuaJIT-2.0.4\src 中,在 Visual Studio 控制台中 执行 msvcbuild.bat 进行编译的,编译会生成 lua51.dll 、lua51.lib、luajit.exe 。
首先,拷贝 protoc-gen-lua-master\protobuf\pb.c 到 LuaJIT-2.0.4\src 目录,然后用文本编辑器打开 msvcbuild.bat ,添加 pb.c 到链接文件列表中,修改如下
@rem Script to build LuaJIT with MSVC.@rem Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h@rem@rem Either open a "Visual Studio .NET Command Prompt"@rem (Note that the Express Edition does not contain an x64 compiler)@rem -or-@rem Open a "Windows SDK Command Shell" and set the compiler environment:@rem setenv /release /x86@rem -or-@rem setenv /release /x64@rem@rem Then cd to this directory and run this script.@if not defined INCLUDE goto :FAIL@setlocal@set LJCOMPILE=cl /nologo /c /O2 /W3 /D_CRT_SECURE_NO_DEPRECATE@set LJLINK=link /nologo@set LJMT=mt /nologo@set LJLIB=lib /nologo /nodefaultlib@set DASMDIR=..\dynasm@set DASM=%DASMDIR%\dynasm.lua@set LJDLLNAME=lua51.dll@set LJLIBNAME=lua51.lib@set ALL_LIB=lib_base.c lib_math.c lib_bit.c lib_string.c lib_table.c lib_io.c lib_os.c lib_package.c lib_debug.c lib_jit.c lib_ffi.c%LJCOMPILE% host\minilua.c@if errorlevel 1 goto :BAD%LJLINK% /out:minilua.exe minilua.obj@if errorlevel 1 goto :BADif exist minilua.exe.manifest^ %LJMT% -manifest minilua.exe.manifest -outputresource:minilua.exe@set DASMFLAGS=-D WIN -D JIT -D FFI -D P64@set LJARCH=x64@minilua@if errorlevel 8 goto :X64@set DASMFLAGS=-D WIN -D JIT -D FFI@set LJARCH=x86:X64minilua %DASM% -LN %DASMFLAGS% -o host\buildvm_arch.h vm_x86.dasc@if errorlevel 1 goto :BAD%LJCOMPILE% /I "." /I %DASMDIR% host\buildvm*.c@if errorlevel 1 goto :BAD%LJLINK% /out:buildvm.exe buildvm*.obj@if errorlevel 1 goto :BADif exist buildvm.exe.manifest^ %LJMT% -manifest buildvm.exe.manifest -outputresource:buildvm.exebuildvm -m peobj -o lj_vm.obj@if errorlevel 1 goto :BADbuildvm -m bcdef -o lj_bcdef.h %ALL_LIB%@if errorlevel 1 goto :BADbuildvm -m ffdef -o lj_ffdef.h %ALL_LIB%@if errorlevel 1 goto :BADbuildvm -m libdef -o lj_libdef.h %ALL_LIB%@if errorlevel 1 goto :BADbuildvm -m recdef -o lj_recdef.h %ALL_LIB%@if errorlevel 1 goto :BADbuildvm -m vmdef -o jit\vmdef.lua %ALL_LIB%@if errorlevel 1 goto :BADbuildvm -m folddef -o lj_folddef.h lj_opt_fold.c@if errorlevel 1 goto :BAD@if "%1" neq "debug" goto :NODEBUG@shift@set LJCOMPILE=%LJCOMPILE% /Zi@set LJLINK=%LJLINK% /debug:NODEBUG@if "%1"=="amalg" goto :AMALGDLL@if "%1"=="static" goto :STATIC%LJCOMPILE% /MD /DLUA_BUILD_AS_DLL lj_*.c lib_*.c pb.c@if errorlevel 1 goto :BAD%LJLINK% /DLL /out:%LJDLLNAME% lj_*.obj lib_*.obj pb.obj@if errorlevel 1 goto :BAD@goto :MTDLL:STATIC%LJCOMPILE% lj_*.c lib_*.c pb.c@if errorlevel 1 goto :BAD%LJLIB% /OUT:%LJLIBNAME% lj_*.obj lib_*.obj pb.obj@if errorlevel 1 goto :BAD@goto :MTDLL:AMALGDLL%LJCOMPILE% /MD /DLUA_BUILD_AS_DLL ljamalg.c@if errorlevel 1 goto :BAD%LJLINK% /DLL /out:%LJDLLNAME% ljamalg.obj lj_vm.obj@if errorlevel 1 goto :BAD:MTDLLif exist %LJDLLNAME%.manifest^ %LJMT% -manifest %LJDLLNAME%.manifest -outputresource:%LJDLLNAME%;2%LJCOMPILE% luajit.c pb.c@if errorlevel 1 goto :BAD%LJLINK% /out:luajit.exe luajit.obj pb.obj %LJLIBNAME%@if errorlevel 1 goto :BADif exist luajit.exe.manifest^ %LJMT% -manifest luajit.exe.manifest -outputresource:luajit.exe@del *.obj *.manifest minilua.exe buildvm.exe@echo.@echo === Successfully built LuaJIT for Windows/%LJARCH% ===@goto :END:BAD@echo.@echo *******************************************************@echo *** Build FAILED -- Please check the error messages ***@echo *******************************************************@goto :END:FAIL@echo You must open a "Visual Studio .NET Command Prompt" to run this script:END
转自 http://blog.csdn.net/huutu http://www.thisisgame.com.cn
具体添加的内容 如图
转自 http://blog.csdn.net/huutu http://www.thisisgame.com.cn
然后 执行 msvcbuild.bat 编译,肯定会出错的……,如下图
转自 http://blog.csdn.net/huutu http://www.thisisgame.com.cn
提示打不开 lua.h ,原因是 pb.c 中是用 #include<lua.h> 这种模式导入头文件
修改成 #include "lua.h" 即可
转自 http://blog.csdn.net/huutu http://www.thisisgame.com.cn
修改后再次编译,还是会报错,不过这个错 上一篇 已经遇到过了。
是因为宏定义的问题,引入了不该引入的头文件。
用宏定义隔开不执行。
转自 http://blog.csdn.net/huutu http://www.thisisgame.com.cn
再次编译,编译成功。
拿上一篇的测试工程,将 pb.c 从项目中移除,然后编译工程,就会提示错误
转自 http://blog.csdn.net/huutu http://www.thisisgame.com.cn
原因是:虽然 pb.c 被添加到了 msvcbuild.bat 中,但是 luaopen_pb 这个函数并没有导出,所以我们再对 pb.c 进行修改。让这个函数导出
首先在开始 添加宏定义
#define LUA_LIB
然后给函数
int luaopen_pb (lua_State *L)
添加导出属性,修改为
LUA_API int luaopen_pb (lua_State *L)
再次执行 msvcbuild.bat 编译 LuaJIT-2.0.4 ,编译成功。
再次编译测试工程,编译成功。
把生成的 lua51.dll 拷贝到项目文件夹,运行,成功。
转自 http://blog.csdn.net/huutu http://www.thisisgame.com.cn
但这并不是我们的目的,继续。
用编译 LuaJIT-2.0.4 生成的 luajit.exe 去执行测试工程中的 main.lua ,发现并不能运行
原因是虽然 pb.c 中的 int luaopen_pb (lua_State *L) 被修改成了 LUA_API int luaopen_pb (lua_State *L) ,编译的时候导出了可以调用,但是在 luajit.exe 中,我们并没有调用
LUA_API int luaopen_pb (lua_State *L) 这个函数!!所以没有 load protobuf 的库。
转自 http://blog.csdn.net/huutu http://www.thisisgame.com.cn
打开 LuaJIT-2.0.4\src\luajit.c ,在 static int pmain(lua_State *L) 函数中添加 LUA_API int luaopen_pb (lua_State *L) 函数的调用。
如下图红框标识新添加的代码
转自 http://blog.csdn.net/huutu http://www.thisisgame.com.cn
再次执行 msvcbuild.bat 编译 LuaJIT-2.0.4 。
再次用 luajit.exe 去运行 main.lua 脚本,终于成功运行!
转自 http://blog.csdn.net/huutu http://www.thisisgame.com.cn
- Luajit 2.0.4 绑定 protoc-gen-lua (Windows 平台)
- SLua 绑定 Protobuf-Lua (protoc-gen-lua) 在SLua中使用 Protobuf
- protoc-gen-lua 编译、安装、使用教程
- protoc-gen-lua中使用 Repeated 标签
- cocos3.9 【 protoc-gen-lua 配置 】
- protoc-gen-lua 编译、安装、使用教程
- cocos2d-x中集成protoc-gen-lua
- protoc-gen-lua 编译、安装、使用教程
- protoc-gen-lua 编译、安装、使用教程
- protoc-gen-lua 编译、安装、使用教程
- 用protoc-gen-lua生成PB的lua代码
- 用protoc-gen-lua生成PB的lua代码
- 用protoc-gen-lua生成PB的lua代码
- lua protobuff 不支持嵌套修改protoc-gen-lua(记录)
- protoc-gen-lua多个proto嵌套的实现
- Quick+PROTOC-GEN-LUA 发现的名字冲突
- protoc-gen-lua extensions正确的使用方式
- protoc-gen-lua Extensions 中只有repeated 导致 Crash
- Java任意同类型对象的复制
- AVAYA完成北电企业网收购 30天内公布更多细节
- hdoj2056(Rectangles 求矩形重叠面积
- iOS远程推送
- storyboard presentViewController pushViewController 跳转后黑屏 NavigationBar按钮push
- Luajit 2.0.4 绑定 protoc-gen-lua (Windows 平台)
- WebView遇到<pre>不正常显示
- 流
- SipXtapi
- OS X10.11上安装cocoapods
- reSIProcate
- CounterPath
- Open Source VOIP Software
- 黑马程序员——网络编程——UDP和TCP(Socket)