2016年3月8日火曜日

Visual Studio 2015 でLuaのスタティックライブラリ(lib)を作成する方法

VC++からLuaのスクリプトを実行する際には、Luaのスタティックライブラリ(lib)が必要となる。
以下の手順を備忘録として記載する。
  • Luaのスタティックライブラリを作成
  • 作成したスタティックライブラリを用いてC++アプリからLuaのスクリプトを実行
[開発環境]
  • x64
  • Windows 10 Pro
  • Visual Studio Community 2015 Update1

1. Luaのソースコードをダウンロードする。

以下のページからLuaの最新のソースコードをダウンロードしてくる。

2016/3/8時点での最新は「lua-5.3.2.tar.gz」。
アーカイブを展開すると以下のディレクトリ構成になっている。

/doc/*** 
/src/*** (*.h/*.c/lua.hpp/Makefile)
/Makefile
/README

2. LuaをVisual Studioでビルドしてスタティックライブラリを作成する。

2-1. Visual Studio でプロジェクトを作成する。

Visual Studioで空のプロジェクトを作成する。今回はプロジェクト名は「LuaBuildVS」とした。

2-2. プロジェクトにLuaのソースコードを追加する。

追加するのはsrcディレクトリ内に存在する「*.h/*.c/lua.hpp」。
Makefileは不要。



2-3. プロジェクトの設定を実施。

  • 構成の種類を「スタティックライブラリ(.lib)」に設定
  • 文字セットを「Unicode文字セットを使用する」に設定
  • 共通言語ランタイムサポートは「共通言語ランタイム サポートを使用しない」に設定

2-3. ビルドを実施。

前述した設定を行ったらビルドを行う。
ビルドするとスタティックライブラリ(LuaBuildVS.lib)が生成される。

3. スタティックライブラリを参照するプロジェクト向けの事前準備

スタティックライブラリを参照するプロジェクト向けに必要なヘッダファイルとスタティックライブラリを所定のディレクトリに配置しておく。今回は以下の場所に配置した。

C:\Develop\lib配下
  • LuaBuildVS.lib
※前述した手順で作成したスタティックライブラリ

C:\Develop\include配下
  • lua.h
  • lualib.h
  • lauxlib.h
  • luaconf.h
  • lua.hpp
※Luaのソースコードから持ってきたヘッダファイル

lua.hppはC++向けのヘッダファイル。
中身は以下となっており、C向けのヘッダファイルをexternしているだけである事が分かる。

extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}

luaconf.hについては、スタティックライブラリを参照するプロジェクト側では直接利用しないが、
他のヘッダファイル内で参照されるため、includeディレクトリに配置しておく必要がある。

4. C++アプリからLuaのスクリプトを実行してみる。

4-1. Visual Studio でプロジェクトを作成する。

今回は「LuaSample」という名前のコンソールアプリケーションを作成した。

4-2. Luaのヘッダファイルへのパスを設定する。

インクルードディレクトリに「C:\Develop\include」を設定する。


4-3. スタティックライブラリへのパスを設定する。

リンカーの追加の依存ファイルに「C:\Develop\lib\LuaBuildVS.lib」を設定する。

4-4. サンプルプログラムを作成する。


#include <iostream>
#include "lua.hpp"

int main(int argc, char** argv)
{
 const char* fileName = "C:\\Develop\\LuaScript\\Sample.lua";

 lua_State* luaState = luaL_newstate();
 luaL_openlibs(luaState);
 std::cout << "result : " << luaL_dofile(luaState, fileName);
 lua_close(luaState);

 int input;
 std::cin >> input;
 return 0;
}

-- Sample.lua
print("Hello Lua!")

実行結果は以下。

0 件のコメント:

コメントを投稿