`

Java调用Lua脚本(LuaJava使用、安装及Linux安装编译)

阅读更多
依赖包(附件有下载):
包名类型操作系统
luajava-1.1.jarjarALL
libluajava-1.1.so.solinux
luajava-1.1.dll.dllwindows


windows:
将luajava-1.1.dll拷贝到java.libary.path目录(通过System.getProperty("java.library.path")可以知道)

linux:
将libluajava-1.1.so拷贝到java.libary.path目录(通过System.getProperty("java.library.path")可以知道)

如果linux有问题,则按以下操作重新编译.so文件

1.编译&安装Lua
tar -zxvf lua-5.1.5.tar.gz
cd lua-5.1.5
make linux install
注:64位系统需要先编辑src/Makefile,在CFLAGS上添加-fPIC。

2.编译与安装Luajava
tar -zxvf luajava-1.1.tar.gz
cd luajava-1.1
修改 config文件,添加JAVA_HOME=/broadtech/javaweb/jdk1.6.0_25
make

3.部署。
将编译好的libluajava-1.1.so拷贝到java.libary.path目录(通过System.getProperty("java.library.path")可以知道),
luajava-1.1.jar拷贝到$JAVA_HOME\jre\lib\ext目录

4、重启项目

注:LuaJava1.1缺少了JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushInteger (JNIEnv * env , jobject jobj , jobject cptr , jint number) 方法的实现,编译前可编辑src/c/luajava.c加入以下代码实现再make

/************************************************************************
*   JNI Called function
*      Lua Exported Function
************************************************************************/
 
JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushInteger
  (JNIEnv * env , jobject jobj , jobject cptr , jint number)
{
   lua_State * L = getStateFromCPtr( env , cptr );
 
   lua_pushinteger( L, ( lua_Integer ) number );
}


LuaUtil.java
/**
 * 调用Lua脚本
 * @author chamcon
 * @date 2013-11-07 15:58:48
 */
public class LuaUtil {
	public static List<String> PUBLIC_LUA_FILES = new ArrayList<String>();
	public static Logger logger = Logger.getLogger(LuaUtil.class);
	
	static {
		//配置公共函数lua文件
		//PUBLIC_LUA_FILES.add("");
	}
	
	/**
	 * 执行Lua脚本
	 */
	public static String execLuaFunc(String lua,String funcName,String value){
		//依赖库文件要放到java.library.path下
		logger.debug("java.library.path:"+System.getProperty("java.library.path"));
		
		LuaState L = LuaStateFactory.newLuaState();
		// 加载lua标准库,否则一些lua基本函数无法使用
		L.openLibs();
		
		//加载公共函数文件
		if(!PUBLIC_LUA_FILES.isEmpty()){
			for(int i=0;i<PUBLIC_LUA_FILES.size();i++){
				L.LdoFile(PUBLIC_LUA_FILES.get(i));
			}
		}
		
		//加载函数串
		L.LdoString(lua);
		//调用函数名
		L.getField(LuaState.LUA_GLOBALSINDEX, funcName);
		//设置参数
		L.pushString(value);
		
		//调用
		L.call(1, 1);
		
		//设置返回对象
		L.setField(LuaState.LUA_GLOBALSINDEX, "RESULT");
		LuaObject lobj = L.getLuaObject("RESULT");
		 
		//获取返回值
		String res = lobj.getString();
		L.close();

		if(res == null) return "";
		return res;
	}
}

本文链接:http://chamcon.iteye.com/blog/1972995
参考:http://www.chinasb.org/archives/2013/06/5115.shtml
2
0
分享到:
评论

相关推荐

    linux环境中c++调用lua动态链接库以及编译方法

    总结来说,C++在Linux中调用Lua动态链接库涉及到Lua库的编译、链接以及在C++代码中的使用。理解这些步骤对于开发涉及C++和Lua混合编程的应用至关重要。正确配置和使用动态链接库,可以让C++充分利用Lua的脚本能力,...

    Lua与C/C++交互——C/C++调用Lua脚本

    本文将深入探讨如何在C/C++程序中调用Lua脚本,以实现强大的功能扩展和灵活的逻辑处理。Lua是一种轻量级的脚本语言,因其简洁、高效的语法和易于嵌入其他系统而受到广泛欢迎。 1. **Lua简介** Lua是一种动态类型的...

    vb调用lua脚本案例,带mdlLua.bas模块

    标题中的“vb调用lua脚本案例,带mdlLua.bas模块”表明这是一个关于使用Visual Basic(VB)编程语言调用Lua脚本的实际应用实例。在这个案例中,开发者提供了一个名为`mdlLua.bas`的模块,这个模块是将Lua的原始C语言...

    Windows下使用mingw编译实现c程序调用lua脚本测试代码源码

    在Windows操作系统中,开发C程序并调用Lua脚本是一个常见的需求,特别是在游戏开发、自动化脚本或者其他需要灵活脚本支持的场景。MinGW(Minimalist GNU for Windows)是一个为Windows提供GNU工具集的开源项目,它...

    centos64位编译luajava1.1

    LuaJava是一个优秀的开源项目,它提供了在Lua脚本语言中调用Java类库的能力,极大地扩展了Lua的功能。在本文中,我们将深入探讨如何在64位的CentOS操作系统上编译和使用Luajava 1.1版本。这个版本包含了两个关键的...

    Javaweb中调用lua的插件

    总结来说,"Javaweb中调用lua的插件"是一个实现Java和Lua互操作的工具,通过luajava库,开发者可以在JavaWeb应用中灵活地使用Lua脚本,同时利用Java的强大功能和稳定性。这对于需要快速迭代和灵活性的项目,尤其是...

    Cocos2d-x 如何使用Lua脚本

    5. **调用Lua函数**:如果需要在Lua脚本中定义函数并从C++调用,可以使用`cocos2d::CCScriptEngineProtocol::callFunction("lua_function_name", args...)`,其中`lua_function_name`是Lua中的函数名,`args...`是...

    Jill——Java编写的Lua脚本引擎

    2. **配置和动态更新**:Lua脚本可以作为配置文件,动态改变游戏参数或系统设置,无需重新编译Java代码。 3. **热修复和扩展**:如果游戏中发现bug,可以通过更新Lua脚本来快速修复,而不用发布新版本。 4. **用户...

    vc 程序调用lua脚本简单示例

    本示例“vc程序调用lua脚本简单示例”正好展示了如何在Visual C++ (vc++)环境中调用Lua脚本来实现这一目标。Lua是一种轻量级的、动态的、解释型的脚本语言,常用于游戏开发、配置文件解析和其他需要嵌入式脚本的语言...

    STM32F103 运行lua脚本例程.rar

    在本例程中,STM32F103被用于运行Lua脚本,这是一种轻量级的、可嵌入式的脚本语言,通常用于游戏开发、自动化任务和快速原型设计。 Lua的移植意味着将Lua解释器的源代码修改和编译,使其能在STM32F103的硬件平台上...

    C++调用Lua配置.

    本文将详细介绍如何在C++环境中调用Lua脚本,并通过一个具体的示例来演示这一过程。 #### 二、测试环境搭建 1. **环境准备**: - 操作系统:Windows 7 - IDE:Visual Studio 2005 - Lua版本:LuaForWindows_v...

    lua编译&反编译,lua反编译工具,Java源码.zip

    这些库提供了Java与Lua之间的桥接,使得开发者可以在Java程序中调用Lua函数,反之亦然。 总之,Lua的编译和反编译是其开发流程中的重要环节,luac是官方提供的标准工具,而luadec等第三方工具则用于辅助字节码的反...

    易语言lua的例子

    通过这些文件,你可以学习到如何在易语言环境中使用Lua,包括导入库、调用Lua函数、执行Lua脚本以及如何处理返回的结果。这对于想在易语言项目中利用Lua的强大功能,比如实现动态配置、游戏逻辑或者复杂的算法,是...

    luajava-x32-x64.zip

    "说明.txt"文件很可能是对如何集成和使用这些库的详细指南,包括如何加载luajava库,如何在Lua中调用Java类,以及如何在Java中执行Lua脚本等步骤。通常,它会提供示例代码帮助开发者快速上手。 总结来说,luajava-...

    Lua 脚本

    Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,Ini等文件格式,并且更容易理解和维护。 Lua由...

    luajava实例及jar包,dll动态链接库

    luajava-1.1.jar是LuaJava的Java库文件,包含了LuaJava的全部Java类和接口,使得Java开发者能够调用Lua环境并执行Lua脚本。在Java程序中,你可以通过`java.lang.ClassLoader`加载此jar包,然后使用`LuajavaLib`类来...

    c++使用lua脚本的实例

    本文将深入探讨如何在C++项目中使用Lua脚本,以"LuaDemo"为例,介绍一个在Visual Studio 2008环境下可编译通过的实例。 首先,我们需要了解C++和Lua的基本概念。C++是一种强大的、静态类型的、编译式的、通用的、大...

    Lua的使用入门之在C++程序中调用lua函数1

    通过这种方式,你可以灵活地在C++程序中调用Lua脚本来控制文本的显示,而无需更改C++代码。只需修改Lua中的`move`函数,就可以实现不同的文本移动策略,从而提高了代码的可维护性和扩展性。记得在使用完Lua环境后,...

    CLua.net 5.3.5 c#调用 lua

    这个库使得C#应用程序能够方便地调用Lua脚本,同时也让Lua代码能够调用.NET Framework中的方法和对象,实现了C#与Lua之间的双向交互。版本5.3.5表明该库基于Lua 5.3.5版本进行封装。 使用CLua.net,你可以将Lua作为...

Global site tag (gtag.js) - Google Analytics