dll - 如何使用 LibFFI 支持构建 Rebol 的 "Ren-C"分支?

标签 dll rebol rebol3

我想使用 Ren-C 中的 FFI 功能访问动态库雷博尔分支。我知道通过启用 LibFFI 支持进行构建是可能的。我需要采取哪些步骤才能启用此功能?

我主要使用 OS X 进行开发,但也希望能够构建它以与 Linux 一起使用。

最佳答案

(注意:这可能是应该添加到 Wiki 中的信息,因为它不是一个语言问题,而是一种会随着时间而变化的问题。但是,可以回答,所以...)

如果您使用 GNU make 方法来构建(其中 make -f makefile.boot 为您生成一个 makefile),那么您应该在其中找到一些行,例如:

TO_OS_BASE?= TO_OSX
TO_OS_NAME?= TO_OSX_X64
OS_ID?= 0.2.40
BIN_SUFFIX=
RAPI_FLAGS= -D__LP64__ -DENDIAN_LITTLE -DHAS_LL_CONSTS -O1 ...
HOST_FLAGS= -DREB_EXE  -D__LP64__ -DENDIAN_LITTLE ...

修改开头的 RAPI_FLAGS 和 HOST_FLAGS 行以添加 -DHAVE_LIBFFI_AVAILABLE。 (-D) 定义了一个预处理器指令来告诉代码可以生成对 FFI 的调用,因为您可以稍后链接它。

现在告诉它在哪里可以找到包含文件。有一行包含内容,应如下所示:

INCL ?= .
I= -I$(INCL) -I$S/include/ -I$S/codecs/ ...

在其尾部,您需要添加类似 -I/usr/local/opt/libffi/lib/libffi-3.0.13/include 或类似内容。实际目录取决于您系统上 libffi 的位置。在我正在查看的 OSX 系统上,其中有两个文件,ffi.hffitarget.h

(注意:恐怕我不知道这些文件是如何到达这台计算机上的。它们没有随操作系统一起提供,所以它们来自......某个地方。我一般不开发在 OSX 上 - 就此而言,我也不使用此 FFI。您必须咨询本地的 FFI-on-OSX 网站,或者联系支持联系人 Atronix Engineering ),他们将 FFI 功能添加到了 Rebol。)

然后有必要告诉它你的系统上有 libffi。您会发现一个 CLIB 行,很可能只是 CLIB= -lm。例如,您可以将其更改为:

CLIB= -L/usr/local/opt/libffi/lib -lm -lffi

-lffi 告诉它寻找 ffi (-l)ibrary,-lxxx 意味着它假定库的名称为 libxxx[something]-L/usr/local/opt/libffi/lib 告诉它在哪里寻找它。你必须弄清楚你在哪里(如果有的话)有 libffi,如果没有的话就获取它。如果你有它,该目录将包含如下内容:

libffi-3.0.13
libffi.6.dylib
libffi.a
libffi.dylib
pkgconfig

I mainly use OS X for development, though would also like to be able to build it for use with Linux.

在 Linux 上,它是类似的,但通常更容易获取该库,就像 sudo apt-get install libffi-dev 一样简单。 RFLAGS 和 CFLAGS 的步骤相同,它应该自动处理位置...因此您只需将 -lffi 添加到 CLIB。

关于dll - 如何使用 LibFFI 支持构建 Rebol 的 "Ren-C"分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34710395/

相关文章:

rebol - 如何在服务器上启动 Rebol2/View 控制台?

rebol - Rebol 适合填写在线网络表格吗?

rebol - 对象与 block

c++ - 如何从 C++ DLL 回调 GO 方法

c# - 使用 Visual Studio 2017 构建 open62541 DLL

c++ - 带模板的 dllexport 函数 (C++)

c# - 如何在 Unity3D 中使用 C++ dll?

rebol - 使用 Rebol 将二进制数据打印到 stdout

rebol - cd 命令在 Red 中的相同上下文中表现不同

Rebol 3 功能已修改?和存在?不适用于 URL 类型