《轉》windows下編譯lua原始碼

2021-09-06 12:43:45 字數 2458 閱讀 4261

因為之前一直使用lua for windows來搭建lua的使用環境,但是最新的 lua for windows 還沒有lua5.2,我又想用這個版本的lua,所以被逼無奈只能自己編一下lua原始碼。

首先從lua的官網

所有的lua原始碼都放在了 src 資料夾下,當然,不同的lua版本目錄結構有可能不一樣,但是都會有 src 這個資料夾,只有這個才是我們編譯必須的。而且lua越做越精簡了,5.1的版本裡面還有一些test的例子之類的,5.2就只剩下必須的內容了。

然後,如果是第一次編譯lua,還是建議看一下doc資料夾下面的 readme.html。我就是通過那個才知道編譯lua必備的檔案的。

通過readme,我們知道了編譯lua其實包含3部分內容:編譯lua的庫檔案,編譯lua直譯器編譯lua編譯器

因為我的電腦上安了vc的編譯器cl,所以這3個部分可以用乙個批處理檔案搞定,下面我們就來寫這個批處理,說到底就是3條編譯命令罷了。

在readme裡面已經提到了這3個部分需要的內容,如下圖:

在上面那個資料夾下建乙個新的bat檔案,如下:

然後開始寫這個bat,先來生成lua的庫檔案:

cd src 

cl /o2 /w3 /c /dlua_build_as_dll l*.c 

del lua.obj luac.obj 

link /dll /out:lua52.dll l*.obj 

cd .. 

這樣就可以在src目錄下生成lua52.dll了。注意到我去掉了lua.obj和luac.obj,因為根據readme這兩個檔案不是必須的。

然後再生成乙個直譯器,接著在上面的**裡面加2行:

cd src 

cl /o2 /w3 /c /dlua_build_as_dll l*.c 

del lua.obj luac.obj 

link /dll /out:lua52.dll l*.obj 

cl /o2 /w3 /c /dlua_build_as_dll lua.c 

link /out:lua.exe lua.obj lua52.lib 

cd .. 

其實就是重新編譯lua.c,然後鏈結生成的lua52.lib就ok了。

最後生成編譯器,繼續加2行,並新增編譯luac.c:

cd src 

cl /o2 /w3 /c /dlua_build_as_dll l*.c 

del lua.obj luac.obj 

link /dll /out:lua52.dll l*.obj 

cl /o2 /w3 /c /dlua_build_as_dll lua.c luac.c 

link /out:lua.exe lua.obj lua52.lib 

del lua.obj 

link /out:luac.exe l*.obj 

cd .. 

這樣,執行這個批處理就可以在src目錄下生成所需的lua庫lua52.dll以及直譯器lua.exe和編譯器luac.exe了。

好人做到底,貼出用vs命令處理器編譯需要幹的事情:

然後進入到mylua.bat的目錄,接著直接執行這個批處理就ok了。簡單吧。

因為開啟了3級警告開關,所以有很多警告,可以去不理睬。結果如下:

最後上傳這個bat檔案。

整個編譯過程都ok,提兩點:

乙個是在cl編譯的時候加入了乙個自定義的巨集 /dlua_build_as_dll 這是因為在luaconf.h檔案中定義了lua_build_as_dll巨集,它控制了__declspec(dllexport)和__declspec(dllimport)的定義,必須加上這個開關才有這兩個定義,否則編譯出來的dll沒有任何匯出函式。

另乙個是在最後生成編譯器的時候,會發現我重新鏈結了所有的obj,而不是像生成直譯器的時候一樣,直接鏈結lua52.lib。這是因為我這麼做的時候發生了報錯,提示有部分函式找不到。暫時沒有明白是什麼原因,有人說是bug,暫且不去管他。

《轉》windows下編譯lua原始碼

因為之前一直使用lua for windows來搭建lua的使用環境,但是最新的 lua for windows 還沒有lua5.2,我又想用這個版本的lua,所以被逼無奈只能自己編一下lua原始碼。首先從lua的官網 所有的lua原始碼都放在了 src 資料夾下,當然,不同的lua版本目錄結構有可...

windows下編譯lua環境

在win下編譯搭建新版本的lua開發環境 解壓到任意目錄 開啟vs開發人員命令提示符 切換到原始碼src目錄 依次執行以下命令 cl md o2 c dlua build as dll c ren lua.obj lua.o ren luac.obj luac.o link dll implib l...

windows下編譯lua原始碼

因為之前一直使用 lua for windows 來搭建lua的使用環境,但是最新的 lua for windows 還沒有lua5.2,我又想用這個版本的lua,所以被逼無奈只能自己編一下lua原始碼。首先從 lua的官網 所有的lua原始碼都放在了 src 資料夾下,當然,不同的lua版本目錄結...