gpt4 book ai didi

c - lua ffi 函数共享命名空间

转载 作者:行者123 更新时间:2023-11-30 15:14:17 27 4
gpt4 key购买 nike

我能够在 Linux 中使用 LuaJit 为两个不同的库共享相同的“命名空间”

A = ffi.load(ffi.os == "Windows" and "opengl32" or "GLESv2")
B = ffi.load(ffi.os == "Windows" and "glfw3" or "glfw")
C = B,A

这样做允许我从 C 变量调用任一库中的函数

但是在最后一个库 A 中的 Windows 函数中找不到(我使用 https://luapower.com/ 中的 LuaJit 二进制文件)

我想两个平台的行为应该相同(如果不能在两个平台上完成(这会很奇怪),那么两个平台都不应该允许它?)

这是一个错误还是有更强大的方法来完成我正在尝试的事情?

最佳答案

如果我正在阅读the documentation正确的话,那么您通常无法通过同一 namespace 访问所有库。

在 POSIX(Linux、BSD 等)系统上,您可以调用 ffi.load( name, true ) 使符号在 ffi.C 中可用。没有提到这在 Windows 上是否有效,所以我认为这在 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/... 上以某种方式完成,但在其中一些或全部上的工作方式完全不同。动态链接只是其中之一。还有更多,包括简单的东西,比如包含文件的“目录”的概念——这个概念存在于所有这些平台上,但没有通用的 API,并且低级包装器(如 LuaJIT 的 FFI 用于动态链接)可能会暴露一些差异。

关于c - lua ffi 函数共享命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34112881/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com