- mascarenhas/alien: A C FFI for Lua (github.com)
https://mascarenhas.github.io/alien/(而非页面中的https://mascarenhas.github.com/alien/) - q66/cffi-lua: A portable C FFI for Lua 5.1+ (github.com)
a binary distribution compatible with the runtime
以LuaJIT FFI为目标。收录于lua-users wiki: Binding Code To Lua \ C Foreign Function Interfaces (FFI)。
提及luaffifb。 - lua——alien库实现lua调用C动态链接库(dll、so)_九日王朝的博客-CSDN博客_alien lua
配置lua版本。配置FFI路径,FFI_DIR / FFI_LIBDIR。 - lua的FFI库--alien_工程师WWW的博客-CSDN博客_ffi 库
较旧。
Linux环境。
环境变量追加:LUA_PATH=..;%LUA_PATH%
lua带参数执行,使包含luarocks安装的库,lua -l luarocks.require(使用环境变量更方便) - Lua调用动态链接库尝试_飞鸽er的博客-CSDN博客
Linux环境。
编译gcc -shared -fPIC参数。 - lua-users wiki: Binding Code To Lua
见子类C Foreign Function Interfaces (FFI)——含alien、cffi-lua。 - Milind's Web: Lua FFI (amved.com)
Facebook LuaFFI (luaffifb) 有多分支可以尝试,博主尝试过dibyendumajumdar/ravi-ffi: FFI package for Ravi and Lua 5.3 (github.com),但测试有问题,后改用libffi+Alien,见下。
最终使用atgreen/libffi(基于下面的更新的libffi/libfii)(文档页未提及lua)、。
luarock安装alien,涉及指定libffi路径——FFI_DIR。在MSYS2\mingw32终端下进行的。 - libffi/libffi: A portable foreign-function interface library. (github.com)
目前最新(较atgreen/libffi)。非ffi for lua(区分以上q66/cffi-lua、ravi-ffi)。 - ffi package/wrap for lua=alien?
alien是实现之一,cffi-lua也是。见以上lua-users wiki(子类C Foreign Function Interfaces (FFI))。 - libffi+Alien/cffi-lua?
- Building and Installing libffi on Windows - FWD - Golden Code Redmine
需要MinGW(MSYS)
使用atgreen/libffi。
完整过程。包含3.2.1版本的binary文件!(libffi-6.dll,貌似无需libffi.lib,因为libffi本来就是继续被引用?) - libffi (sourceware.org)(atgreen/libffi: A portable foreign-function interface library. (github.com))
看首页应用很广泛。虽然更新日期非最新,估计是稳定了。 - 尝试编译libffi:
-
It's also possible to build libffi on Windows platforms with Microsoft's Visual C++ compiler. In this case, use the msvcc.sh wrapper script during configuration like so:
path/to/configure CC=path/to/msvcc.sh CXX=path/to/msvcc.sh LD=link CPP="cl -nologo -EP" CPPFLAG
- where CC有\cygwin64\bin\cc、\cygwin64\bin\cc.exe
- 使用CC=msvcc.sh、CC="path\.."报错cc: error: =msvcc.sh: No such file or directory+cc: fatal error: no input files
- 使用CC msvcc.sh有msvcc.sh: file not recognized: file format not recognized+collect2: error: ld returned 1 exit status
- 最终使用上面的Building and Installing libffi on Windows - FWD - Golden Code Redmine,轻松编译!!...
- luarocks install alien中提及No file xxx in yyy的问题,不是所有xxx都需要,使用以上编译libffi得到的文件即可。
- 但以上仍未得到alien模块(.dll或.lua)
- 再参见以上的Milind's Web: Lua FFI (amved.com)
亦提到MSYS环境下的编译ffi的流程./configure+make
同时提及观察到luarocks执行的亦为linux格式的命令,故可以使用MSYS手动编译。
参考mascarenhas/alien: A C FFI for Lua (github.com)的安装说明Installing Alien。 - 有#include "x"、<y>之分,前者是相对工作区,后者是库类。
- 搜索MinGW\include,能找到标准库路径。
参见mingw免装版配置环境变量(include文件夹不存在c++文件夹的配置方法)_値訁的博客-CSDN博客 - 又遇上src/alien.c:357:54: error: 'FFI_SYSV' undeclared here (not in a function)、src/alien.c:357:64: error: 'FFI_STDCALL' undeclared here (not in a function); did you mean 'CC_STDCALL'?的问题
从源文件中删掉以上可继续。上下文知无大碍。 - 又报错..
$ makemake all-ammake[1]: Entering directory `/f/alien-master' CCLD src/alien_c.lalibtool: link: warning: undefined symbols not allowed in i686-pc-mingw32 shared librariesmarkdown doc/alien.md > doc/alien.html/bin/sh: markdown: command not foundmake[1]: *** [doc/alien.html] Error 127make[1]: Leaving directory `/f/alien-master'make: *** [all] Error 2
- 以上问题尝试--disable-docs无果,提示configure: WARNING: unrecognized options: --disable-docs。
- 使用configure --help学习
- 没有./autogen.sh(libffi/libffi: A portable foreign-function interface library. (github.com))
- 尝试去掉Makefile里的
doc/alien.html: $(srcdir)/doc/alien.md
markdown $< > $@ - 在alien-master,configure后也会生成luarock的rockspec,但尝试结果同上。
- MSYS命令:./configure --disable-docs LUA=lua53.exe CPPFLAGS='-IF:/libffi -IC:/ProgramFiles/lua/lua-5.3.4_Sources/include' LDFLAGS='-LC:/ProgramFiles/ZeroBraneStudio/bin -Lf:/libffi'
但不知何时起运行结果为:$ make
make all-am
make[1]: Entering directory `/f/alien-master'
make[1]: Leaving directory `/f/alien-master' - 尝试make check(自$(MAKE) $(AM_MAKEFLAGS) XXX)
貌似是此警告后退出(leaving directory):libtool: link: warning: undefined symbols not allowed in i686-pc-mingw32 shared libraries - 可以在生成的makefile里找到configure中配置的信息。
如LDFLAGS
参见:MINGW32中dll,lib,a中的关系_没-昵称的博客-CSDN博客
c++ - libtool: undefined symbols not allowed in i686-pc-mingw32 shared - Stack Overflow - make失效的话(如上的Entering+Leaving),可以make clean下。
- 在LDFLAGS中加上后-no-undefined,make又出现大量src/alien.c:1139: undefined reference to `luaL_optinteger'
照说这些该在#include "lua.h"等之中。 - 不会要求所有的依赖都是同一种编译吧?(lua、libffi)
- undefined reference to ‘xxxxx’
参见C语言调用Lua编译问题总结_IM魂影的博客-CSDN博客
-