Lua を C++ に組み込むのは初めてです。2 日前から検索していますが、ほとんどのインターネット チュートリアルは lua5.2 と互換性のない lua5.1 を使用しています。そこで、lua のドキュメント、ソース コードの例を少し読んだところ、次のようになりました。
main.cpp :
#include "luainc.h"
#include <iostream>
int main(){
int iErr = 0;
lua_State *lua = luaL_newstate (); // Open Lua
luaopen_io (lua); // Load io library
if ((iErr = luaL_loadfile (lua, "hw.lua")) == 0)
{
std::cout<<"step1"<<std::endl;
if ((iErr = lua_pcall (lua, 0, LUA_MULTRET, 0)) == 0)
{
std::cout<<"step2"<<std::endl;
lua_getglobal (lua, "helloWorld"); // Push the function name onto the stack
if (lua_type(lua, lua_gettop(lua)) == LUA_TNIL) {
// if the global variable does not exist then we will bail out with an error.
std::cout<<"global variable not found : helloworld"<<std::endl;
/* error so we will just clear the Lua virtual stack and then return
if we do not clear the Lua stack, we leave garbage that will cause problems with later
function calls from the application. we do this rather than use lua_error() because this function
is called from the application and not through Lua. */
lua_settop (lua, 0);
return -1;
}
// Function is located in the Global Table
/* lua_gettable (lua, LUA_GLOBALSINDEX); */ //lua5.1
lua_pcall (lua, 0, 0, 0);
}
}
lua_close (lua);
return 0;
}
hw.lua :
-- Lua Hello World (hw.lua)
function helloWorld ()
io.write ("hello World")
end
luainc.h:
#ifndef __LUA_INC_H__
#define __LUA_INC_H__
extern "C"
{
#include </home/renardc/Documents/Programmation/Lua_CPP/lua-5.2.2/src/lua.h>
#include </home/renardc/Documents/Programmation/Lua_CPP/lua-5.2.2/src/lauxlib.h>
#include </home/renardc/Documents/Programmation/Lua_CPP/lua-5.2.2/src/lualib.h>
}
#endif // __LUA_INC_H__
エラーはありません。出力は次のとおりです。
step1
step2
これは、「helloworld」関数が見つかったことを意味するはずです。しかし、出力に「Hello World」が表示されないので、関数が呼び出されていないと思われます。私は何を間違っていますか?
これは私のプログラムをコンパイルする方法です:
g++ main.cpp -L/usr/local/include -I/usr/local/include -llua