一、製作我們的Lua庫(lua.lib)
第一步:準備好lua的源文件(目前我用的是最新版本lua-5.2.3,下載地址:http://www.lua.org/download.html);
第二步:把lua-5.2.3源文件隨便放一個盤的目錄下(好處是路徑少,目前我是喜歡放到D盤,比如:D:\lua-5.2.3);
第三步:運行vs2013,新建一個win32控制檯應用程序項目,項目名稱:Lualib。如圖:
第四步:按確定之後,再點擊下一步後,進入“應用程序設置”界面,在應用程序類型:選擇“靜態庫”,附加選項:去掉預編譯頭。然後點擊完成。如圖:
第五步:在Lualib工程的頭文件和源文件分別附加上lua-5.2.3的(.h文件)和(.c文件)
①:鼠標右擊Lualib工程目錄下的頭文件----->添加------>現有項 把:D:\lua-5.2.3\src中所有.h頭文件添加進來
②:鼠標右擊Lualib工程目錄下的源文件----->添加------>現有項 把:D:\lua-5.2.3\src中所有.c源文件添加進來
第六步:接下來是比較重要的,配置項目屬性。 打開菜單欄上的“項目”------->“屬性”-------->“配置屬性”
①:在C/C++選項下,選中常規,第一項“附加包含目錄”中填上D:\lua-5.2.3\src。如圖:
②:在C/C++選項下,選中高級,第二項“編譯爲”選擇:編譯爲C代碼(/TC)。點擊確定。如圖:
第七步:上面完成之後。直接運行項目,生成我們需要的lua.lib文件。不過我這裏直接運行會出現以下的錯誤,如圖:
不過不用擔心,已經有辦法修復。還是在配置屬性上面設置。
打開菜單欄上的“項目”------->“屬性”-------->“配置屬性”。在C/C++選項下,選中預處理器 ,在第一選項的“預處理器定義”中加入_CRT_SECURE_NO_WARNINGS 即可。
第八步:再次運行項目,你會發現彈出“無法啓動程序”的警告。這個不用管,我們看“輸出框”最後一句話就好。因爲我們是弄靜態庫的,當然是不能啓動程序啦。
完成這一步,我們的lua庫終於做好了。不信,你在D:\vsProject\Lualib\Debug下是不是有個Lualib.lib文件啊。這就是我們要的庫。接下來拿個簡單例子測試一下。
二、測試C++調用Lua
第一步:跟上面一樣,新建一個win32控制檯應用程序項目,項目名稱爲:mytest。然後點擊完成即可。
第二步:鼠標右擊解決方案,添加現有項目(記住是現有項目,而不是現有項,不然後面會出差錯的哦),找到上面創建的Lualib文件夾下的Lualib.vcxproj文件,點擊確定添加。
如圖:
第三步:鼠標右擊mytest項目,選擇“屬性”,然後選中“通用屬性”下的“引用”添加Lualib的引用。如圖:
第四步:在“配置屬性” 的在“C/C++項”中選着“常規”,在第一項“附加包含目錄”中填上D:\lua-5.2.3\src。如圖
第五步:上面完成之後,不多說,直接上代碼。在mytest.cpp文件上添加如下代碼:
- // mytest.cpp : 定義控制檯應用程序的入口點。
- //
- #include "stdafx.h"
- #include <iostream>
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- extern "C"
- {
- #include "lua.h"
- #include "lualib.h"
- #include "lauxlib.h"
- };
- using namespace std;
- int _tmain(int argc, _TCHAR* argv[])
- {
- //打開Lua
- lua_State *L = luaL_newstate();
- /*加載lua所有庫*/
- luaL_openlibs(L);
- //luaopen_base(L);
- //luaopen_io(L); //替換老版本的lua_iolibopen(L);
- //luaopen_string(L); //替換老版本的lua_strlibopen(L);
- //luaopen_math(L); //替換老版本的lua_mathlibopen(L);
- //luaopen_debug(L); //替換老版本的lua_dblibopen(L);
- /*加載test.lua文件並運行*/
- luaL_dofile(L, "test.lua");
- /*清除lua*/
- lua_close(L);
- getchar();
- return 0;
- }
- print("hello world")
第六步:不多說,直接運行看結果。
三、在網上下載別人的代碼運行的例子
第一步:直接運行例子,看看能不能正常運行或者有什麼出錯的。剛下的文件,一運行立馬報錯。見圖:
看看什麼意思呢?原來是沒有包含lua幾個的頭文件,因爲我下的例子剛好沒有。沒事,沒有頭文件,我們就加頭文件,跟上面的測試例子有的相似。
在“配置屬性” 的在“C/C++項”中選着“常規”,在第一項“附加包含目錄”中填上D:\lua-5.2.3\src。如圖
- 錯誤 1 error LNK1104: 無法打開文件“C:\Users\wy\Desktop\LuaLearning4\Debug\..\..\lib\lua5.1.lib C:\Users\wy\Desktop\LuaLearning4\LuaLearning4\LINK LuaLearning4
看到這個,大家應該知道是沒有找到庫的原因吧。那好,我們就加上我們上面製作的庫吧。還記得怎麼附加進去嗎?
①:鼠標右擊解決方案,添加現有項目,找到上面創建的Lualib文件夾下的Lualib.vcxproj文件,點擊確定添加。
②:鼠標右擊項目,選擇“屬性”,然後選中“通用屬性”下的“引用”添加Lualib的引用。如圖:
第三步:好,我們再運行看看。什麼,還是同樣的問題?我猜估計是路徑問題了。呵呵,找找看。這路徑剛好對應我們的鏈接器。好了,上圖:
原來問題出在這裏,這個應該是原來的例子就設置好鏈接庫的。不過我現在用的是新的版本lua-5.2.3。就用我們之前的做的庫吧。
說到這裏,有兩種辦法解決這個問題。
第一種解決方法:直接把“附加依賴項”的內容全刪除了。估計有人會問到爲什麼? 那我誠心誠意的回答你,我們不是附加了一個庫了嗎?把它刪了,不就可以鏈接到我們的庫了嗎?
第二種解決方法:直接把“附加依賴項”的內容全刪除了,不過把我們的庫及其路徑放上去。如:D:\vsProject\Lualib\Debug\Lualib.lib即可。