code::blocks + C + lua 編譯環境

來源:互聯網
上載者:User

lua是一個指令碼語言,它的編譯器非常簡單。一般而言,lua在遊戲裡面使用得比較多。它可以通過類似於指令碼的形式把函數的功能串列起來,實現很多不可思議的效果。現在關於lua的資料比較少,主要有兩個文檔可以介紹一下。一個是雲風翻譯的lua手冊,另外一本就是lua作者編寫的《Programming in lua》。可是很多朋友看完了這兩本資料之後還是不太清楚該怎麼使用。今天乘著有空,可以把自己的一些使用經驗來寫一寫。 我們可以把lua看成是lib庫,在使用的時候把這個lib添加到自己的工程裡面就可以了。這裡介紹的方法是windows下用code::blocks編譯lua的方法,因為code::blocks是跨平台的,linux下編譯方法也差不過。

(1)下載lua工程,為http://www.lua.org/ftp/,可以選擇一個比較新的版本,太舊的版本文法不一樣,我選擇的是最新的lua-5.2.1.tar.gz);
(2)在code::blocks中建立一個Dynameic Link Library工程,名為lua_dll。將(1)中下載的檔案解壓到工程路徑下,並在工程中添加src下的檔案;
(3)將lua.c中的main函數修改為lua_main,將luac.c中的main函數修改為luac_main;
(4)編譯後產生lua_dll.dll;
(5)再建立一個Console application工程,名為Test_lua
(6)選擇工程後->Build options,Linker settings->link librarys中添加 lua_dll.dll,在Search directiories -> Compiler 中添加 lua 的原始碼目錄,如(D:\lua-5.2.1\src);
(7)在main.c中編輯代碼:

#include <stdio.h>#include "lua.h"#include "lualib.h"#include "lauxlib.h"#include "luaconf.h"int main(int argc, char* argv[]){    lua_State* L = luaL_newstate();    luaL_openlibs(L);    luaL_dofile(L, "D:\\__Development\\C\\delve\\Test_lua\\test.lua");    lua_close(L);    return 0;}

(8)此時,我們還需要建立test.lua檔案,內容如下,

 

function show()    local b = {}    local index    for index = 1,10,1 do        print(index)    endendshow()

(9)編譯執行後,輸出1,2,3,4,5,6,7,8,9,10就表示成功了。

這樣就結束了嗎?沒有,我們目前做的是編一個lib,然後其他工程中使用這個lib來執行lua,我們也可以直接用lua 的原始碼加入項目來編譯。

(1)建立Console application工程,名為Test_lua_with_src;
(2)把lua的src檔案夾複製到工程下面,並更名src為lua_src;
(3)在工程中添加lua_src目錄(Add files recursively... );
(4)將lua.c中的main函數修改為lua_main,將luac.c中的main函數修改為luac_main;
(5)main.c中與上面差不多,只是修改一下標頭檔路徑,注意test.lua的位置。

#include <stdio.h>#include "lua_src/lua.h"#include "lua_src/lualib.h"#include "lua_src/lauxlib.h"#include "lua_src/luaconf.h"

(5)直接編譯即可

 

第二種方法可以更方便的修改lua自身的代碼來擴充lua,也不需要建立工程的時候添加lib和.h路徑。

--------------------------------------------------------------------------------------------------------------

上面的代碼只是執行了一個lua程式,與lua進行互動,參考一個測試代碼;

#include <stdio.h>#include "lua_src/lua.h"#include "lua_src/lualib.h"#include "lua_src/lauxlib.h"#include "lua_src/luaconf.h"int main(int argc, char *argv[]) {char buff[256];    int error;    lua_State* L = luaL_newstate();    luaL_openlibs(L);    //luaopen_base(L);    //luaopen_table(L);    //luaopen_io(L);    //luaopen_string(L);    //luaopen_math(L);    //printf("xxxx\n");    while (fgets(buff, sizeof(buff), stdin) != NULL) {        error = luaL_loadbuffer(L, buff, strlen(buff),"line") || lua_pcall(L, 0, 0, 0);        if (error)        {            fprintf(stderr, "%s", lua_tostring(L, -1));            lua_pop(L, 1);        }    }    lua_close(L);    return 0;}

執行後,可直接輸入lua的語句,例如:print(1+2) ,返回結果為3.
更詳細的關於lua的請查閱其他資料,http://blog.csdn.net/zhangjingyangguang/article/details/5221691這裡有一些。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.