CはLuaに電話し、Luaの環境問題を解決します

       これは常にフレームワーク上で開発されており、スカイネットの利点の1つは、luaを使用してロジックを記述できることです。そのため、C呼び出しluaを自分で試したことはありません。現在、aiをトレーニングしており、これを行う。

       最初に概念を補足します。

       1. Cは自身のメモリを管理し、適用して解放する必要があります

       2. Luaは自動的にメモリを管理し、参照されない変数は定期的にGCになります

       次に、cがluaを呼び出す場合、lua変数が解放されると、それは悲劇になります。したがって、常にlua変数を参照するには、1つのことを使用する必要があります。Cとluaの間の相互作用は、仮想スタックを使用して相互作用することです(個人的な理解)。

       以下はコードです。これらのCはLuaのAPIを使用して特定の用途を確認できます。

        lua 5.3中国語リファレンスマニュアルアドレスを添付してくださいhttps//www.runoob.com/manual/lua53doc/contents.html#contents

  1.以下はCコードです

#include <stdio.h>

extern "C" 
{
	#include "lua.h"
	#include "lauxlib.h"	//这里需要真tm的注意,不是luaxlib
	#include "lualib.h"
}

//调用lua中的add函数
int call_lua_add(lua_State *L)
{
	lua_getglobal(L, "add"); 		//把虚拟机中全局变量 add 压入虚拟机L的栈,这里注意,一定要是全局变量
	lua_pushnumber(L, 123);			//第一个参数入栈
	lua_pushnumber(L, 456); 		//第二个参数入栈
	lua_call(L, 2, 1);				//调用栈中的add函数,2个参数,1个返回值
	int sum = (int)lua_tonumber(L, -1);		//获取栈顶元素(上一步的返回值)
	lua_pop(L, 1);		//栈顶元素出战
	return sum;
}

int main()
{
	lua_State *L = luaL_newstate();		//新建lua虚拟机
	luaL_openlibs(L);					//在虚拟机中载入lua所有函数库
	luaL_dofile(L, "Test.lua");			//加载 并 运行指定的文件
	lua_settop(L, 0);					//重新设置栈底,这个过程,是为了确认栈底是空的,以便后面的操作是按照顺序入栈的且从1号栈位开始
	int ret = call_lua_add(L);
	printf("调用lua文件结果为 %d\n", ret);
	lua_close(L);						//一定记得关闭虚拟机  

	return 0;
}

2.以下はluaコードです

function add( x, y )
	return x+y
end

print("你终于动手了")

3. cファイルをコンパイルして、エラーが報告されていることを確認します。理由は、ヘッダーファイルが見つからない、つまり環境が指定されていないためです。

4.簡単に見つけます

4.次にコンパイルし、-Iパラメーターを使用してヘッダーファイルディレクトリ(i)を指定すると、エラーが報告されていることがわかります。

このエラーは、これらがすべてlualibライブラリにあるため、これらのものが見つからなかったことを意味します。検索して指定するだけです。

5. cp / usr / lib / x86_64-linux-gnu / liblua5.3.so.0を直接sudoします。ライブラリをこのディレクトリにコピーしてから、名前をliblua5.3.soに変更します。次にコンパイルします。-lパラメーターを使用してプログラムにリンクするライブラリーを指定します。-lパラメーターの後にライブラリー名(l)を指定します。エラーは報告されません。実行します。結果は次のとおりです

       しばらくluaを使っているので、Cとluaのやりとりは難しくないといつも感じていましたが、実際に操作して初めて難しいのか、難しいのかを判断する力があると感じています。そうではありません。今日試してみましたが、それほど難しくはありません。それでも結論を出す前に、自分でできる限り努力する必要があります。「剣も、剣も、概念もありません」

 

おすすめ

転載: blog.csdn.net/banfushen007/article/details/107956696