2011-02-26 11 views
6

実行中にLuaスクリプトをやりとりする/呼び出すことができるC++プログラムを書いてみたい。プログラムの重要なコンセプトは完全なプラットフォームの独立ですが、私は実際に何かを提供するLuaビルドを見つけることができないようです。C++にLuaを埋め込む

私が今までに見つけたLuaビルドは、環境変数または.lib,.dllまたは.soのような特定のライブラリに基づいています。公式のLuaソースはlua.orgからも私が探しているものではなく、主な機能を定義しています。

シンプルなケースがありますか?sqlite-amalgamation - Lua-interpreter for C/C++これらの依存関係はありません。

答えて

7

lua.cはmainを含み、コンソールアプリケーションのエントリポイントを定義します。それをプロジェクトから削除すると、残ったものはスタンドアロンのlibや動的ライブラリになります。

+0

あなたの答えをありがとう!ちょうどlua.c(スタンドアロンインタプリタ)とluac.c(Lua-to-Bytecode-Compiler)には、ソースが別のフォルダに分かれていないという奇妙なものが含まれていることに気付きました... – MFH

+0

@MFH、この組織はかなりです典型的なMakefileベースのプロジェクトでは典型的です。 Luaの全体の年齢に注意してください。 Makefileは、コアからの静的ライブラリと動的ライブラリの両方を(プラットフォームに応じて)ビルドし、必要に応じてそれらにリンクされたlua.cとluac.cをコンパイルします。 – RBerteig

+0

aha、正直言って、私は少しMAKEFILESを使用しましたが、私は決して本当に好きになったことはありませんでした。私はいつもアプリケーションを別のフォルダに分けました... – MFH

4

次は私が(私はしばらく前に似た何かを発見し、それはので、私はより速くそれを変更することができます適応)私のプロジェクトのための出発点として使用するものである:


のluaスクリプトファイル:

-- Start 
    -- Script: myscript.lua 
    print("this is lua") 
    -- End 

Cファイル:

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

    int main(void) { 
      static const luaL_reg lualibs[] = { 
        { "base",  luaopen_base }, 
        { NULL,   NULL } 
      }; 

      static void openlualibs(lua_State *l) { 
        const luaL_reg *lib; 

        for (lib = lualibs; lib->func != NULL; lib++) { 
          lib->func(l); 
          lua_settop(l, 0); 
        } 
      } 

      lua_State *l; 
      l = lua_open(); 
      openlualibs(l); 

      printf("now calling lua\n\n"); 
      lua_dofile(l, "myscript.lua"); 
      printf("\ndo something else\n\n"); 

      lua_close(l); 
      return 0; 
    } 

これはプロジェクトの基礎として自由に使用できます。

2

Luaコアとスタンドアロンインタプリタの単一ファイルの組み合わせビルドについては、公式ソースキットのファイルetc/all.cを参照してください。おそらく最後の行のlua.cへの参照を削除することによって、それをあなた自身の合併のための基礎として確かに使用することができます。

Luaを組み込む大規模なアプリケーションの多くは、コアソースファイルをプロジェクトに追加するだけで実行できます。これは、拡張コードがコンパイルされたモジュールを.dllまたは.soファイルからロードすることをアプリケーションが許可しない場合に特に有効です。アプリケーションでコンパイルされたモジュールが許可されている場合は、アプリケーションおよびロードされたモジュールがコアライブラリの単一インスタンスからシンボルを参照できるように、コアの共有ライブラリとリンクするのが通常です。 Luaコアの複数のインスタンスを誤って含めると、症状を診断するのが非常に困難になることがほとんど保証されます。

関連する問題