Lua5.3.5源碼編譯

首先從lua官網下載源碼http://www.lua.org/download.html並解壓:

 

VS2017 新建項目->控制檯應用

將解壓出來的src文件夾,拷貝到解決方案目錄下

建好項目,添加lua源碼:

 

Ctrl+A 選擇src目錄下所有文件,並添加至項目

至此準備工作完成,接下來分別編譯Lua解釋器Lua.exe,Lua編譯器Luac.exe,Lua靜態庫(或者動態庫)Lualib.lib

編譯Lua.exe

    從項目"源文件"篩選器中移除 luac.c。編譯即可。

編譯Luac.exe

   建議在解決方案下新建個Luac的項目,依然將src下所有文件添加至項目,從項目"源文件"中移除 lua.c,編譯即可。

編譯Lualib.lib(或Luadll.dll)

  在解決方案下新建項目Lualib 項目(根據需要,動態庫或者靜態庫自行選擇),同樣將src下所有文件添加至項目,從項目"源文件"中 移除 lua.c和luac.c

也可以先創建控制檯應用,然後在項目屬性裏改:

編譯好Lua.exe與Luac.exe後,記得把它們添加到環境變量,否則用起來很不方便。添加環境變量方法,網上資料很多,這裏就不說了。

上面教程,在網上隨便都可以搜到,我說說我遇到的坑...

 我也按照上面教程編譯出lua.exe luac.exe。寫了一個測試程序,進行測試

可見lua.exe是沒問題的。

測試luac:

正常輸入luac a.lua,a.lua所在目錄下應該會生一個.out文件,但我運行完並沒有生成。

看了一下源碼,發現問題所在。

我們爲什麼在前面要把lua.c或者luac.c只留一個,或者兩個都刪除(編譯lib)? 因爲lua.c裏有一個main函數,即lua.exe的入口,而luac.c裏也有main函數。但正常情況下,一個程序只能有一個main函數入口,所以我們要將另外一個刪除,否則有多個main函數會衝突、報錯或者出現一些奇怪的問題。

我的問題就找到了,因爲在生成項目的時候,會自動生成一個項目名.cpp(Luac項目會生成luac.cpp),這個cpp文件中,就定義了一個main函數,編譯的時候,把這個函數作爲程序的入口函數,把luac.c中的main函數忽略了。所以luac就無法獲取到傳進來的參數,也就不會生成.out文件。

 所以在編譯的時候,還要記得把項目自動生成的 項目名.cpp文件移除(例如lua.cpp),因爲這個文件中的main函數會影響 lua.c或者luac.c中main函數 獲取參數,從而使程序無法正常工作。

  想我編譯lua.exe時,沒有把lua.cpp移除,而且還能正常運行 a.lua文件,應該屬於運氣好。luac.exe一下就把問題暴露了

 記下來這個小插曲,防止別人遇到和我同樣的問題

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章