Luaのお勉強#1
きっかけ
Luaに興味を持ったきっかけはこれ。
スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践 (GAME DEVELOPER)
- 作者: 浜中誠
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2008/09/27
- メディア: 大型本
- 購入: 13人 クリック: 322回
- この商品を含むブログ (40件) を見る
スクリプト言語からCのプログラムを呼ぶんではなく、あくまでCとかC++をメイン言語として何かしたい(実際に何をしたいかは漠然と考えている)というのが頭にあって、でもメンドクサイのはやだなあ、と思っていたらLuaってのが最近のゲーム開発でホット(? squirrelとかも興味アリ)だということを知り、本を買った。
コード
#include <stdio.h> #include <string> #include <iostream> #include "lua.hpp" int main(void) { using namespace std; string strLuaScript1 = "print('hello Lua world');"; string strLuaScript2 = "return 'one', 'two', 'three'"; lua_State *L = lua_open(); luaL_openlibs(L); luaL_dostring(L, strLuaScript1.c_str()); luaL_dostring(L, strLuaScript2.c_str()); string result1 = lua_tostring(L, 1); string result2 = lua_tostring(L, 2); string result3 = lua_tostring(L, 3); cout << result1 << "|" << result2 << "|" << result3 << endl; return 0; }
はまったところ
- namespace
はじめ、c++のnamespaceがよくわかってなくて、main全体を
namespace std { int main(void) { ....... } }
とかやってしまって、エントリポイントが見つからないと怒られ、ハマった。std::mainとなっていたのにも気づかずに。
- dllとかlibとか
先日、dllとlibをビルドしたんだが、実行ファイルの出力ディレクトリにlua51.dllが必要みたいなので、コピーした。
lua51.libを依存ライブラリとしているんだが、静的ライブラリとして組み込まれていないのかな?
lua_State *L = lua_open();
ここらでタブン、動的に読み込んでいるに違いない。よくわからん。調べてみる。
全然違った。http://exlight.net/devel/windows/dll/windll.htmlによると、暗黙的なリンクということらしい。luaのMakefileが静的ライブラリの.libを作るのではなく、インポートライブラリとして、作成されるということか。紛らわしい。Windowsの動的リンクライブラリのアーキテクチャなんて久々すぎて忘れちゃったよ〜。
使い慣れていない言語に触ると、言語固有のシンタックスとか、はまるよな〜。
って仕事の合間に関係ないことをやっているおれ。