生成lua的静态库.动态库.lua.exe和luac.exe
2015-01-13 11:21
302 查看
前些日子准备学习下关于lua coroutine更为强大的功能,然而发现根据lua 5.1.4版本来运行一段代码的话也会导致 “lua: attempt to yield across metamethod/C-call boundary”的错误(据悉主线程中调用yield也会如此)。
于是就想使用5.2以上的版本试试;windows下没有5.2以上的版本,又不愿意使用VS编译出lua.exe;就在网上搜索下了关于使用命令行生成lua的静态库.动态库.lua.exe和luac.exe资料:现整理如下:
将下载的lua源码解压,在src目录下 打开VC命令行提示窗口 执行如下代码即可(针对5.1):
生成~~~ 静态库:
生成~~~ 动态库:
生成~~~ lua.exe:
生成~~~ luac.exe:
以上是针对5.1.4的;想比较于5.2而言,变动还是蛮大的,就需要根据源码中Doc目录下readme.html所提醒的去编译:
比如我要编译5.2.3,生成lua.exe的话,执行之下代码即可:
Building Lua on other systems(eg:windows)原文如下:
If you're not using the usual Unix tools, then the instructions for building Lua depend on the compiler you use. You'll need to create projects (or whatever your compiler uses) for building the library, the interpreter, and the compiler, as follows:
library:
lapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c lbitlib.c lcorolib.c ldblib.c liolib.c lmathlib.c loslib.c lstrlib.c ltablib.c loadlib.c linit.c
interpreter:
library, lua.c
compiler:
library, luac.c
如若编译时选得参数和版本不太一致就会出现类似的错误:
linit.obj : error LNK2001: 无法解析的外部符号 _luaopen_coroutine
linit.obj : error LNK2001: 无法解析的外部符号 _luaopen_bit32
VC命令行:可配置VS or VC环境变量,也可采取如下方法设置下即可:
运行脚本vsvars32.bat:
D:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\vsvars32.bat
这个批处理 主要就是在运行CMD的时候先为我们设置一下环境变量(临时的) (这个脚本中写入的是bin, lib,include , tools的路径信息,也可以自己配置)
抑或可以参考 这里 or 这里
于是就想使用5.2以上的版本试试;windows下没有5.2以上的版本,又不愿意使用VS编译出lua.exe;就在网上搜索下了关于使用命令行生成lua的静态库.动态库.lua.exe和luac.exe资料:现整理如下:
将下载的lua源码解压,在src目录下 打开VC命令行提示窗口 执行如下代码即可(针对5.1):
生成~~~ 静态库:
del *.obj liblua.lib cl -c -nologo -O2 -Ob1 -Oi -Gs -MT lapi.c lcode.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c ldblib.c liolib.c lmathlib.c loslib.c ltablib.c lstrlib.c loadlib.c linit.c link -lib -out:liblua.lib -verbose:lib *.obj
生成~~~ 动态库:
del *.obj liblua.dll cl -c -nologo -O2 -Ob1 -Oi -Gs -MT -DLUA_BUILD_AS_DLL lapi.c lcode.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c ldblib.c liolib.c lmathlib.c loslib.c ltablib.c lstrlib.c loadlib.c linit.c link -link -dll -out:liblua.dll -verbose:lib *.obj
生成~~~ lua.exe:
del *.obj lua.exe cl -c -nologo -O2 -Ob1 -Oi -Gs -MT lapi.c lcode.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c ldblib.c liolib.c lmathlib.c loslib.c ltablib.c lstrlib.c loadlib.c linit.c lua.c link -link -out:lua.exe -verbose:lib *.obj
生成~~~ luac.exe:
del *.obj luac.exe cl -c -nologo -O2 -Ob1 -Oi -Gs -MT lapi.c lcode.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c ldblib.c liolib.c lmathlib.c loslib.c ltablib.c lstrlib.c loadlib.c linit.c print.c luac.c link -link -out:luac.exe -verbose:lib *.obj
以上是针对5.1.4的;想比较于5.2而言,变动还是蛮大的,就需要根据源码中Doc目录下readme.html所提醒的去编译:
比如我要编译5.2.3,生成lua.exe的话,执行之下代码即可:
del *.obj lua.exe cl -c -nologo -O2 -Ob1 -Oi -Gs -MT lapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c lbitlib.c lcorolib.c ldblib.c liolib.c lmathlib.c loslib.c lstrlib.c ltablib.c loadlib.c linit.c lua.c link -link -out:lua.exe -verbose:lib *.obj
Building Lua on other systems(eg:windows)原文如下:
If you're not using the usual Unix tools, then the instructions for building Lua depend on the compiler you use. You'll need to create projects (or whatever your compiler uses) for building the library, the interpreter, and the compiler, as follows:
library:
lapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c lbitlib.c lcorolib.c ldblib.c liolib.c lmathlib.c loslib.c lstrlib.c ltablib.c loadlib.c linit.c
interpreter:
library, lua.c
compiler:
library, luac.c
如若编译时选得参数和版本不太一致就会出现类似的错误:
linit.obj : error LNK2001: 无法解析的外部符号 _luaopen_coroutine
linit.obj : error LNK2001: 无法解析的外部符号 _luaopen_bit32
VC命令行:可配置VS or VC环境变量,也可采取如下方法设置下即可:
运行脚本vsvars32.bat:
D:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\vsvars32.bat
这个批处理 主要就是在运行CMD的时候先为我们设置一下环境变量(临时的) (这个脚本中写入的是bin, lib,include , tools的路径信息,也可以自己配置)
抑或可以参考 这里 or 这里
相关文章推荐
- 在Linux下如何使用GCC编译程序、简单生成 静态库及动态库
- linux下静态库.a与.o生成动态库.so
- Linux下生成和使用/静态和动态库
- 在Linux下如何使用GCC编译程序、简单生成 静态库及动态库。
- linux下gcc编译生成静态及动态库
- android NDK学习篇2之two-libs——使用(单个)静态库生成动态库
- Eclipse下生成.dll动态库及.a静态库使用 for Windows [z]
- 静态库变为动态库,外部符号如何生成?
- 静态库与动态库的生成
- Lua环境搭建luavs.bat文件不能生成exe
- 查找qt生成的exe软件需要的动态库.以及打包
- srlua编译生成exe可执行文件
- vs2008 静态连接生成一个exe
- 关于使用VS生成Lua 5.2.3编译器与解释器 动态库 静态库
- makefile生成动态库和静态库文件
- android NDK 使用(多个)静态库生成动态库
- gcc详解以及静态、动态库的生成1
- Linux下生成静态库.a文件和动态库.so文件
- iOS 静态库和动态库的区别&静态库的生成
- Lua学习---编译生成lua和luac