问题背景:
OS: Linux Ubuntu
编辑: gcc
Launguage: C++
2个项目:
- Project 1: to build a dynamic lib using Lua; (libBattleCore.so)
- Project 2: to build a console application, using the libBattleCore.so generated by Project 1
问题描述
项目2编译命令:
g++ -Wall -fexceptions -O2 -o bin/Release/Battle
ZeroBrain Studio (ZBS): error loading module 'rds.parser' from file '/opt/zbstudio/bin/linux/x64/clibs53/rds/parser.so':
/opt/zbstudio/bin/linux/x64/clibs53/rds/parser.so: undefined symbol: luaL_register
stack traceback:
[C]: in ?
[C]: in function '
我试图在我的C++程序中使用Lua。我的操作系统是LinuxManjaro15.12。我下载了Lua5.3源代码,并将其编译为C++代码(我确实需要异常处理而不是longjmp),并使用以下行:
make "CC=g++" linux
然后,sudo make将Lua安装在/usr/local中。一切看起来都很好。我的CMake版本似乎正在更新:
cmake --version
cmake version 3.4.1
在我的CMake文件中,我发现Lua如下所示:
find_package(Lua REQUIRED)
include_directories(${LUA_INCL
我正在将Lua嵌入到C/C++应用程序中。有没有办法在不执行整个脚本的情况下从C/C++调用Lua函数?
我试过这样做:
//call lua script from C/C++ program
luaL_loadfile(L,"hello.lua");
//call lua function from C/C++ program
lua_getglobal(L,"bar");
lua_call(L,0,0);
但它给了我这个:
PANIC: unprotected error in call to Lua API (attempt to call a nil
我正在C++中实现lua (5.1),遇到了问题,无法将lua函数作为从lua调用的c++函数的参数传递。示例(从C++调用Main函数):
卢阿:
function Main()
HookEntityFunction("player", 1, PlayerSpawn); -- << is this normal?
end
function PlayerSpawn()
end
C++:
int HookEntityFunction(lua_State *L)
{
lua_CFunction F = lua_tocfunction(L, 3); -
简单地说,测试程序在C++端创建一个协同线,使用Lua-side函数启动它,并使用一些日志多次恢复。在第一次调用resume时,它突然崩溃,开始运行coroutine,违反了对无效堆内存(0xfdfdfd)的访问权限。
以下是整个代码:
#include <juce_core/juce_core.h>
#include <lauxlib.h>
int debug_log( lua_State* lua )
{
int narg = lua_gettop( lua );
juce::StringArray tokens;
for ( int i
根据Lua,如果Lua5.1或更高版本被编译为C++,它将使用C++异常。因为Lua是一个C库,所以它只在makefile中引用CC。因此,我的想法是将CC重新定义为"g++“,这样我就不必修改makefile。
make generic CC="g++"
我可以在没有任何问题的情况下建造Lua。但是,现在当我将我的C++应用程序链接到Lua (静态)库时,我会收到许多Lua函数(lua_checklstring、lua_pushinteger等)的未定义引用错误。
当我使用gcc构建Lua时,我的应用程序链接成功。
make generic CC="gcc
让我们在“luafunc.lua”中有一个代码:
function foo(a, b)
return a + b
end
a = io.read('*n')
b = io.read('*n')
print (foo(a, b))
让我们尝试使用C++文件中的function:
#include <iostream>
using namespace std;
extern "C"{
#include <lua.h>
#include <lualib.h>
#include &l
我想做这样的事情:
Create object in Lua将此对象传递给C++,在此对象上执行一些从C++传递该对象的方法
现在我在卢阿有了这个
Account = {balance = 0}
function Account.Create(name)
local a = Account:new(nil, name);
return a;
end
function Account:new (o, name)
o = o or {name=name}
setmetatable(o, self)
self.__index = self
return o
en
我在c++中创建了一个对象,我想将它传递给Lua,在Lua中,我需要获取该对象并传递给c++。
在c++中:
class Measure
{
public:
Measure();
private:
int value;
}
Void PassObjToLua(lua_State *L)
{
Measure * m=new Measure(); // I need to pass this object to Lua
// How to implement?
}
Void GetObjFromLua(lua_State *L)
{
//I need to
好日子,我真的花了几乎所有午后时间在Centos 7上安装lua5.3 。我主要找到了安装Lua5.1的信息,但我们确实需要5.2或5.3版本。
如果我找到5.3的信息,那不是Centos的信息。
到目前为止,我能做的最好的就是从lua网站下载源代码版本,但我仍然无法安装它。
以下是我的步骤,也许你可以帮我继续
curl -R -O http://www.lua.org/ftp/lua-5.3.4.tar.gz
tar zxf lua-5.3.4.tar.gz
cd lua-5.3.4
make linux test
问题是,从那时起,我如何安装它。
我试过了
make
和
make linu
我有一个c++ (遗留)应用程序,它调用一些lua脚本来实现一些功能。
现在,我正在编写一个新的c++库,应该从该lua脚本中调用它。
#include <lua.hpp>
extern "C" {
static int isquare(lua_State *L){ /* Internal name of func */
return 1; /* One return value */
}
static int icube(lua_State *L){
我正在寻找每个实际需要运行lua脚本所需的库,该脚本需要火炬库。
test.lua
#!/usr/bin/env lua
print "Welcome to LUA"
print('_VERSION = ' .. _VERSION)
require("nn") -- this loads torch nn libraries to be further used in the code
print "Load pass"
输出
Welcome to LUA
_VERSION = Lua 5.1
Load pass
当我用
lld
我正在用C++制作一个图形用户界面。
我想要一个Lua脚本向C++注册Lua函数,这样当C++处理按钮单击时,C++将调用已注册的Lua函数。
我使用了以下这样的帖子作为指南:
由于某种原因,随着我的改变,它不起作用了。
这是我的Lua密码
-- this is button.setClickEvent
function self.setClickEvent(eventFunction)
uiButtonSetClickEvent(self.id, eventFunction)
end
function buttonClick()
print("yay it work
首先,我为我的英语感到抱歉。
我的问题是如何在lua_call函数中多次使用C++。我有一个使用lua作为主要语言的程序,但是它接受c++插件来添加功能。我想从c++调用LUA函数,并在LUA中调用该c++函数。我想在工作过程中编写一个带有进度的c++函数,然后将这个过程传递给一个LUA函数,该函数负责向用户显示进度。
目前,我在LUA中有一个测试函数:
function ShowText(text)
Dialog.Message("Hi", text);
return true;
end
和一个c++函数:
static int Test(lua_State
如何一次为lua_State设置全局c++指针。并从C函数中获取。
Context *context = new Context();
lua_State *lua = luaL_newstate();
// Store context in lua state
lua_pushcfunction(lua, fn_one);
lua_setglobal(lua, "one");
// Register other global functions
我将从我的所有函数中获取它
int fn_one(lua_State *lua)
{
Context *context
我有一个由C++构造的大对象(我已经公开给Lua),我想在Lua中进行处理。
我可以使用int、lua_pushstring而不是C++类将任何简单类型传递给Lua函数( lua_pushinteger、string)。我已经尝试了lua_pushlightuserdata,通过推一个指向我的对象的指针,但是没有运气。
function process(object) --object is the c++ passed function
--return processed data
end
我怎么能这么做?这可能吗?
请注意,我希望将一个在C++中构造的特定实例传递给Lua。我可以公开构造