标签: luajit

如何使用Lua调用共享库中的函数

我有一个共享库,其中有一些功能。我想通过使用 luajit 获取他们的签名来访问他们。

我有一个 libtest_c.so --> /usr/local/lib

lua --> /usr/local/bin

要求(“test_c”)

标准输入:1:未找到模块“test_c”:

no field package.preload['test_c']
no file './test_c.lua'
no file '/usr/local/share/luajit-2.0.4/test_c.lua'
no file '/usr/local/share/lua/5.1/test_c.lua'
no file '/usr/local/share/lua/5.1/test_c/init.lua'
no file './test_c.so'
no file '/usr/local/lib/lua/5.1/test_c.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
Run Code Online (Sandbox Code Playgroud)

堆栈回溯:[C]:在函数“要求”标准输入:1:在主块 [C]:在 0x00404270

lua ffi luajit

2
推荐指数
1
解决办法
1336
查看次数

使用 LuaJIT 调用标准打开对话框会导致访问冲突

使用 LuaJIT 的 FFI遵循MSDN 的 GetOpenFileName 示例。我已经尝试让它工作两天了,不仅对话框没有打开,而且整个事情都崩溃了。

当使用 OllyDdb 进行调试时,它会在comdlg32.dll中的某处引发丑陋的访问冲突。

这是仅包含基本代码的概念证明。如果我指定结构大小为零,它会毫无问题地退出,GetLastError()会抛出87 (ERROR_INVALID_PARAMETER)

所以我认为问题与 struct 或 FFI 有关。

如果有人能够在这里阐明一些...谢谢。

ffi = require"ffi"
bit = require"bit"

collectgarbage("stop")

ffi.cdef[[
  static const int OFN_FILEMUSTEXIST             = 0x1000;
  static const int OFN_NOCHANGEDIR               = 8;
  static const int OFN_PATHMUSTEXIST             = 0x800;

  typedef bool BOOL;
  typedef char CHAR;

  typedef unsigned short WORD; 
  typedef unsigned long DWORD;

  typedef void *PVOID;
  typedef void *LPVOID;
  typedef void *LPOFNHOOKPROC;

  typedef unsigned long HANDLE;
  typedef HANDLE HWND; …
Run Code Online (Sandbox Code Playgroud)

c winapi lua ffi luajit

1
推荐指数
1
解决办法
814
查看次数

在C中,NULL等于0,所以我应该将这两个值视为零吗?

Afaik NULL可以(或者实际上,至少在我的stdlib实现中)#define'd as:

#define NULL ((void*)0)
Run Code Online (Sandbox Code Playgroud)

此外,/sf/answers/64727841/声明在C++中NULL是透明地转换为/从((int)0)(这是std::nullptr在C++中使用的原因,因为它有一个真正的nil类型/值对,由于nullptr_topaque typedef).

所以,我目前正在开发一个LuaJIT库,并希望提供一个辅助函数来检查值nil/ NULL/不管(=价值意义 nil,但也许不是类型nil).

目前,那是:

function ffi.nil(value)
  return value==nil or value==ffi.NULL
end
Run Code Online (Sandbox Code Playgroud)

但是,在我的系统中(NULL==0)通过此片段打印验证,在C中是真的,这是正确的true:

#include <stdio.h>
#include <stdlib.h>
void main(void){
  if(NULL==0)
    printf("true\n");
  else
    printf("false\n");
}
Run Code Online (Sandbox Code Playgroud)

那么我应该去寻找" nil意义价值"的定义吗?

function ffi.nil(value)
  return value==nil or value==ffi.NULL or value==0
end
Run Code Online (Sandbox Code Playgroud)

TL; DR:在C中,NULL等于0,而在LuaJIT的FFI中,没有两对nil, ffi.NULL, 0相等; 因此,在定义nil …

c null lua luajit

1
推荐指数
1
解决办法
1568
查看次数

如何从C读取火炬张量

我必须使用Torch框架训练卷积神经网络,然后在C中编写相同的网络.为此,我必须以某种方式从我的C程序中读取网络的学习参数,但我找不到办法将Torch Tensors转换或写入文件以使其在C中可读.理想情况下,我想将Tensors转换为C中的double数组.

有谁知道这是怎么做到的吗?提前致谢 :)

c lua luajit neural-network torch

1
推荐指数
1
解决办法
2185
查看次数

使用 Lua FFI 写入文件

我正在尝试使用Lua FFI使用LuaJIT将一些文本附加到文件中,但我对 C 不是很了解,所以我遇到了一些麻烦。这是代码:

local ffi = require "ffi"

ffi.cdef[[
typedef int __kernel_ssize_t;
typedef __kernel_ssize_t ssize_t;
ssize_t write(int fildes, const void *buf, size_t nbyte);
]]

local f = io.open("/tmp/test", "a+") -- Opening file in append mode

local message = "Hello World"
ffi.C.write(f, message, string.len(message))

f:close()
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

luajit: test.lua:12: bad argument #1 to 'write' (cannot convert 'void *' to 'int')
stack traceback:
    [C]: in function 'write'
    c.lua:12: in main chunk
    [C]: at 0x0100001490
Run Code Online (Sandbox Code Playgroud)

lua file ffi luajit

1
推荐指数
1
解决办法
1083
查看次数

是否可以从NGINX以root权限执行bash脚本并获取输出?

我在Openresty构建下运行Nginx,因此启用了Lua脚本。我想创建一个URI位置(除了IP白名单外,还将使用SSL +身份验证来保护它),该位置允许来自授权源的webhooks调用使用根权限在服务器上执行bash脚本。例如

https://someserver.com/secured/exec?script=script.sh¶m1=uno¶m2=dos

NGINX将使用'script'和'param#'GET请求参数在shell中执行“ script.sh uno dos”。它捕获脚本输出和bash返回代码(如果可能)。

我了解以root用户身份运行NGINX和运行任意命令的安全性,但是如上所述,对URI的访问将得到保护。

是否可以通过本地NGINX模块或Lua脚本实现?有任何示例代码可以帮助我入门吗?

谢谢。

lua nginx luajit openresty

1
推荐指数
1
解决办法
1479
查看次数

msvcbuild - 如何编译luajit

我刚刚下载了luajit并试图编译它.我正在做这里所说的一切

编译它我应该从VS .NET Command Promt执行msvcbuild.所以我安装了VS 2010并启动了VS 2010 Command Promt

当我尝试执行nsvcbuild时,它说"没有这样的程序和bla-bla-bla".

首先我认为没有环境路径.所以我决定在Program Files文件夹中找到文件msvcbuild.exe.并且没有这样的文件.

我做错了什么,我该怎么做才能编译luajit?

任何帮助appriciated!

lua luajit

-1
推荐指数
1
解决办法
2043
查看次数

LuaJIT FFI cdef不理解'课堂'?

class Myuser * MyClient_GetMyUser(AUser aUser);
Run Code Online (Sandbox Code Playgroud)

这是尝试使用ffi.cdef声明该函数的错误:

Error: dllImport.lua:861: declaration specifier expected near 'class' at line 20
Run Code Online (Sandbox Code Playgroud)

这怎么可能?如果我必须在cdef中这样做,我将如何宣布'课堂'?

c c++ lua ffi luajit

-2
推荐指数
1
解决办法
593
查看次数

标签 统计

lua ×8

luajit ×8

c ×4

ffi ×4

c++ ×1

file ×1

neural-network ×1

nginx ×1

null ×1

openresty ×1

torch ×1

winapi ×1