terça-feira, 30 de julho de 2013

Primeira aplicação Lua em Code::Blocks


No último post, Compilando Lua com MinGW, ensinei como compilar a biblioteca Lua e gerar os arquivos necessários para utilizá-la em nossos projetos. Hoje, como havia prometido, mostrarei como configurar o ambiente do Code::Blocks para compilar uma aplicação simples que utiliza a biblioteca Lua.





Estou utilizando a versão 12.11 do Code::Blocks rodando o compilador MinGW. Para baixar o Code::Blocks, você pode acessar o site http://www.codeblocks.org/. Para a configuração do ambiente, utilizaremos os arquivos que compilamos no último post juntamente com alguns dos fontes. Os arquivos gerados pela compilação foram "lua.exe", "luac.exe", "lua52.dll", "liblua.a", entre outros arquivos objeto.

Crie uma pasta com o nome "lua" dentro da pasta CodeBlocks\MinGW\Include. Dentro desta pasta, copie os arquivos "lua.h", "lua.hpp", "lualib.h", "luaconf.h" e "lauxlib.h". Estes arquivos estão dentro da pasta "src", junto aos arquivos compilados como feito no último post.

Pasta criada dentro de Include

Agora, copie o arquivo "liblua.a" para a pasta CodeBlocks\MinGW\lib. Não precisa criar nenhuma pasta para este arquivo, ele pode ser copiado diretamente para esta pasta. Assim que copiar, renomeie o arquivo de "liblua.a" para "liblua52.a". Isto me parece uma boa ideia para manter a diferença entre as versões da biblioteca.

Pronto. Agora vamos configurar o projeto dentro do Code::Blocks. Abra o Code::Blocks e escolha File->New->Project. Escolha a opção "Console Application" e clique em "Go". Selecione a linguagem C e escolha a pasta de destino do projeto. Marque apenas a opção "Release" e clique em "Finish". Agora selecione o menu "Project->Build options...". Vá na aba "Linker settings", adicione a biblioteca clicando em "Add" e busque o arquivo "liblua52.a". Se a mensagem "Keep this a relative path", clique em "Yes". Em "Other Linker Options", adicione o texto "-llua52 -lm". A tela deve ficar desta forma:





Pronto, a configuração está feita. Agora, para testar vamos rodar um código simples:

#include <stdlib.h>
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>

int main()
{
    char buff[256];
    int error;
    lua_State *L = luaL_newstate(); /* opens Lua */
    luaL_openlibs(L); /* opens the standard libraries */
    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); /* pop error message from the stack */
        }
    }
    lua_close(L);

    return 0;
}

Este exemplo foi copiado do livro Programming in Lua e mostra como é possível embarcar o interpretador de Lua em uma aplicação C. Ao rodar a aplicação, você poderá entrar com comandos em Lua e terá o resultado no próprio prompt.

Console embarcado de Lua

 É isso aí pessoal, espero que tenham gostado.

Até a próxima.

Breno.
Compartilhe:

0 comentários:

QuaseHard. Tecnologia do Blogger.