在沒有 Scons 的情況下編譯 Toluapp |
|
我想在 tolua++ 網站上發表此文章,但他們沒有 wiki。
tolua++ INSTALL 檔案能讓你了解如何不使用 SCons 來編譯它。這相當簡單,但我想為人們省下 5 (呃... 15) 分鐘來解決這個問題。
我在 mingw 安裝上使用 gcc 3.4.2。但我認為這應該對大多數人來說都能執行,至少對於那些使用 gcc 的人來說是這樣,而且修改幅度也很小。
*首先你必須將目錄轉換到已下載並解壓縮的 tolua++ 資料夾中。
cd <path_to_tolua++_folder>\src\lib使用的指令為
tolua++_1.0.5\src\lib> gcc -shared -o tolua++.dll *.c <path_to_lua>\Lua502.dll -I ..\..\include -I <path_to_lua>\include- 這將在 src\lib 目錄中產生一個動態連結函式庫 tolua++.dll。
tolua++_1.0.5-1\src\lib> gcc -c *.c -I ..\..\include -I <path_to_lua>\include tolua++_1.0.5-1\src\lib> ar rcsv libtolua++.a *.o- 這將在 src\lib 目錄中產生一個連結函式庫。
tolua++_1.0.5\src\bin> gcc tolua.c toluabind.c -I ..\..\include -I <path_to_lua>\include -L ..\lib\ -ltolua++ -L <path_to_lua>\Lua502.dll- 這假設 libtolua++.a 已在 src\lib 目錄中產生,並在 src\bin 目錄中產生 tolua++ 可執行檔。
注意事項1:如果您使用的是與 lua 靜態函式庫連結,而不是動態函式庫,請將 <path_to_lua>\Lua502.dll
替換成 -L <path_to_lua>\lib -llua .
DLL
開啟 "檔案->新增專案"
功能表。從專案類型方塊清單中選擇 "Visual C++ 專案->Win32"
。從範本方塊清單中選擇 "Win32 專案"
。輸入"tolua++"
作為專案名稱。
當精靈開啟時,請在右側選擇 "應用程式設定"
。選擇 "DLL"
並按一下 '完成'
。
在 Solution Explorer 中的 "source files"
上按一下右鍵,並選擇 "新增->現有項目"
。瀏覽到 tolua++\src\lib 目錄的位置。將所有 .c 和 .h 檔案標示出來,並將它們新增到專案中。您也可以選擇從 include 目錄將 tolua++.h 檔案新增到 "header files"
資料夾。
在 Solution Explorer 中的 tolua++ 專案上按一下右鍵並選擇 "屬性"
。
在 "C/C++ -> 一般"
區段中選擇 "其他包含目錄"
選項。瀏覽到 Lua 包含檔案的位置。
在 "C/C++ -> 預處理器"
區段中,新增下列內容:TOLUA_API=extern __declspec(dllexport)
在 "C/C++ -> 預編譯標頭"
區段中,關閉預編譯標頭。在 "連結器 -> 一般"
區段中,選擇 "其他函式庫目錄"
選項,並瀏覽到 Lua .lib 函式庫檔案的位置。在 "連結器 -> 輸入"
區段中新增 lua.lib 和 lualib.lib(假設這些是您的 lua 函式庫)。
編譯專案應產生一個 tolua++.dll。
EXE
若要產生 tolua++.exe,請開啟 "檔案->新增專案"
功能表,選擇 Visual C++-> Win32 -> Win32 主控台
專案。將 tolua.c 和 toluabind.c 檔案新增到專案中。
您必須將所有相關的 Lua include 和函式庫目錄新增到此專案中。其處理流程與前述相同。在「C/C++-> 預處理器」區段下,新增:TOLUA_API = extern __declspec(dllimport),...等...
請注意,對 v1.0.92,我必須移 toluabind.c 中出現的 TOLUA_API。
int TOLUA_API tolua_tolua_open (lua_State* tolua_S)結果為
int tolua_tolua_open (lua_State* tolua_S)
雖有一些細微差異需要修正,與上述(對於 vs2003)相同範疇的註解大致適用。
請注意,由於 VS 對 c99 支援不佳,因此「EXE」組建中的「toluabind.c」將無法編譯。有許多行看起來如下
... int top; top = lua_gettop(tolua_S); static unsigned char B[] = { ...
這些部分需要變更為
... int top = lua_gettop(tolua_S); static unsigned char B[] = { ...
或類似格式。
已使用 vs2005(無服務套件)和 tolua++ 1.0.91 進行測試。