lua ffi 函数共享命名空间
lua ffi functions sharing namespace
我可以在 Linux
中使用 LuaJit 为两个不同的库共享相同的 "namespace"
A = ffi.load(ffi.os == "Windows" and "opengl32" or "GLESv2")
B = ffi.load(ffi.os == "Windows" and "glfw3" or "glfw")
C = B,A
这样做允许我从 C 变量调用任一库中的函数
但是在 windows 中找不到最后一个库 A 中的函数(我使用的是来自 https://luapower.com/ 的 LuaJit 二进制文件)
我想两个平台的行为应该相同(如果不能在两个平台上完成(这很奇怪)那么两个平台都不应该允许吗?)
这是一个错误还是有更强大的方法来完成我正在尝试的事情?
如果我没看错 the documentation,那么您通常无法通过同一命名空间访问所有库。
在 POSIX(Linux、BSD 等)系统上,您可以调用 ffi.load( name, true )
使符号在 ffi.C
中可用。没有提到在 windows 上工作或不工作,所以我认为这不会在那里工作。
这意味着这不是错误,您正在寻找的更可靠的方法是通过不同库的各自库名称空间访问它们的符号。 (对于您的示例,这意味着通过 A
访问 opengl 函数,通过 B
访问 glfw 函数。)
I guess both platforms should behave the same (if it can't be done on both platforms (which would be odd) then neither platform should allow it?)
在 Windows/Linux/Mac OS/BSD/... 上可以通过某种方式完成很多事情,但在其中一些或全部上的工作方式完全不同。动态链接只是其中之一。还有更多,包括简单的东西,比如包含文件的 "directory" 的概念——这个概念存在于所有这些平台上,但没有通用的 API,以及一个低级包装器(比如 LuaJIT 的 FFI 是为了动态链接)可能会暴露一些差异。
我可以在 Linux
中使用 LuaJit 为两个不同的库共享相同的 "namespace"A = ffi.load(ffi.os == "Windows" and "opengl32" or "GLESv2")
B = ffi.load(ffi.os == "Windows" and "glfw3" or "glfw")
C = B,A
这样做允许我从 C 变量调用任一库中的函数
但是在 windows 中找不到最后一个库 A 中的函数(我使用的是来自 https://luapower.com/ 的 LuaJit 二进制文件)
我想两个平台的行为应该相同(如果不能在两个平台上完成(这很奇怪)那么两个平台都不应该允许吗?)
这是一个错误还是有更强大的方法来完成我正在尝试的事情?
如果我没看错 the documentation,那么您通常无法通过同一命名空间访问所有库。
在 POSIX(Linux、BSD 等)系统上,您可以调用 ffi.load( name, true )
使符号在 ffi.C
中可用。没有提到在 windows 上工作或不工作,所以我认为这不会在那里工作。
这意味着这不是错误,您正在寻找的更可靠的方法是通过不同库的各自库名称空间访问它们的符号。 (对于您的示例,这意味着通过 A
访问 opengl 函数,通过 B
访问 glfw 函数。)
I guess both platforms should behave the same (if it can't be done on both platforms (which would be odd) then neither platform should allow it?)
在 Windows/Linux/Mac OS/BSD/... 上可以通过某种方式完成很多事情,但在其中一些或全部上的工作方式完全不同。动态链接只是其中之一。还有更多,包括简单的东西,比如包含文件的 "directory" 的概念——这个概念存在于所有这些平台上,但没有通用的 API,以及一个低级包装器(比如 LuaJIT 的 FFI 是为了动态链接)可能会暴露一些差异。