Hello Lua World

29Oct06

Jag har i dag skrivit mitt livs hårdaste “Hello World” program, japp ett “Hello World” program som tog hela dagen att skriva och ändå använde jag inte COBOL. Det måste vara ett världsrekord i skriva simpel kod långsamt.

Vad var det då som var så himla svårt? Jag ville baka in en lua interpeter i ett C++ program. Momentet att utöka funktionaliteten i ett program med ett scriptspråk är ganska vanligt i både spel och nyttoprogram.

Problemet var inte att skriva programmet i sig utan hur man sedan kompilerar det, efter att ha googlat ett par timmar gick jag in på IRC #lua@freenode och frågade. Man vågar ju inte fråga innan man har googlat ordentligt. Någon minut senare var problemet löst.

Lösningen var att man skulle länka lua dynamiskt med ‘-ldl’. Detta stod inte på något av de exemplen jag tittade på.

c++:
#include "iostream"
extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
#define FILE "./hello.lua"
using namespace std;
int main(int argc, char* argv[])
{
lua_State* luaVM = lua_open();
if(luaVM==NULL){
cout << "\nFailed to init lua" << endl;
return -1;
}else{
luaopen_io(luaVM);
luaopen_base(luaVM);
luaopen_table(luaVM);
luaopen_string(luaVM);
luaopen_math(luaVM);
luaopen_loadlib(luaVM);
lua_dofile(luaVM, FILE);
lua_close(luaVM);
}
return 0;
}

makefile:
all:
g++ -o main main.cpp \
-I/usr/local/include\
-L/usr/local/lib\
-ldl -llua -llualib

lua-skriptet:
--lua hello world kod
io.write("Hello world")

output:
Hello world

About these ads


One Response to “Hello Lua World”

  1. Intressant.. har tänkt att göra detta någon gång.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


Follow

Get every new post delivered to your Inbox.

%d bloggers like this: