自己編譯lua源碼


對於一個開源工程,開始學習它的第一步自然是編譯工程。

使用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編譯方法

准備:

  1. 新建一個空解決方案
  2. 打開解決方案目錄,新建文件夾“include”和“src”
  3. 復制源碼中所有.h文件到include目錄,所有.c文件到src目錄
  4. 刪除src目錄下的lua.c、luac.c

編譯dll:

  1. 新建一個win32 dll的空項目
  2. 修改包含目錄,在其中添加include目錄
  3. 把src目錄下的所有文件全部加入項目
  4. 添加define:LUA_BUILD_AS_DLL、_CRT_SECURE_NO_WARNINGS
  5. 可選:修改屬性→C/C++→代碼生成→運行庫,為多線程,不依賴VC運行庫dll
  6. 可選:新建一個資源文件,設置dll的版本信息

編譯靜態庫:

  1. 新建一個win32 靜態庫的空項目
  2. 修改包含目錄,在其中添加include目錄
  3. 把src目錄下的所有文件全部加入項目
  4. 添加define:_CRT_SECURE_NO_WARNINGS

 

 

lua編譯器和lua解釋器有什么區別,都是用來干什么的?

 

lua編譯器把lua腳本編譯成lua虛擬機的指令。(bytecode)
lua解釋器除了有編譯器外還有虛擬機,可以執行編譯后的指令。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM