對於一個開源工程,開始學習它的第一步自然是編譯工程。
使用vc編譯lua,在網上已有許多介紹,但“紙上得來終覺淺”,自己走一遍還是有必要的。
步驟如下:
1.下載源代碼,從lua.org下載最新源代碼包lua-5.2.2,解壓到本地
2.打開vc建立一個solution,就叫lua.sln
3.創建一個名為liblua的project(lua庫),添加除lua.c和luac.c以外的所有代碼文件,將lua庫編譯為dll(這里注意,需要在預處理器中添加LUA_BUILD_AS_DLL和LUA_CORE兩個宏)
4.創建一個名為lua的project(lua解釋器),添加除luac.c以外的所有代碼文件
5.創建一個名為luac的project(lua編譯器),添加除lua.c以外的所有代碼文件
6.編譯、鏈接即可。注意lua和luac兩個工程沒有依賴liblua動態庫,而是直接使用的源代碼,這是因為luac里用到的一些API缺省情況下是不被liblua導出的,需要改些設置,所以直接用源代碼省事了。
生成結果:
lua庫:liblua.dll、liblua.lib
lua解釋器:lua.exe:
lua編譯器:luac.exe
完成了編譯,下一步當然是順便運行個Hello World玩玩:
1.打開記事本,輸入如下一行代碼:
print("Hello World!")
保存成hello.lua
2.啟動命令行,進入lua.exe所在目錄,運行命令行:
>lua hello.lua
顯示輸出:Hello World!
=========================================================================
與 平台無關。Lua幾乎可以運行在所有我們聽說過的系統上,如NextStep、OS/2、PlayStation II (Sony)、Mac OS-9、OS X、BeOS、MS-DOS、IBM mainframes、EPOC、PalmOS、MCF5206eLITE Evaluation Board、RISC OS,及所有的Windows和Unix。Lua不是通過使用條件編譯實現平台無關,而是完全使用ANSI (ISO) C,這意味着只要你有ANSI C編譯器你就可以編譯並使用Lua。
要在C++中使用Lua非常簡單,不管是GCC,VC還是C++Builder, 最簡單的方法就是把Lua源碼中除lua.c,luac.c和print.c以外的所有c文件與你的代碼一起編譯鏈接(或加入到工程中)即可。
因為Lua是用C語言寫的,除非編譯lua庫時指定編譯器強制以C++方式編譯,否則在C++工程中應該這樣包含lua頭文件:
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
======================================================================
lua 5.2.3 VS2012編譯方法
准備:
- 新建一個空解決方案
- 打開解決方案目錄,新建文件夾“include”和“src”
- 復制源碼中所有.h文件到include目錄,所有.c文件到src目錄
- 刪除src目錄下的lua.c、luac.c
編譯dll:
- 新建一個win32 dll的空項目
- 修改包含目錄,在其中添加include目錄
- 把src目錄下的所有文件全部加入項目
- 添加define:LUA_BUILD_AS_DLL、_CRT_SECURE_NO_WARNINGS
- 可選:修改屬性→C/C++→代碼生成→運行庫,為多線程,不依賴VC運行庫dll
- 可選:新建一個資源文件,設置dll的版本信息
編譯靜態庫:
- 新建一個win32 靜態庫的空項目
- 修改包含目錄,在其中添加include目錄
- 把src目錄下的所有文件全部加入項目
- 添加define:_CRT_SECURE_NO_WARNINGS
lua編譯器和lua解釋器有什么區別,都是用來干什么的?
lua編譯器把lua腳本編譯成lua虛擬機的指令。(bytecode)
lua解釋器除了有編譯器外還有虛擬機,可以執行編譯后的指令。