如何在 LibFFI 支持下构建 Rebol 的"Ren-C"分支?



我想使用Ren-C Rebol分支中的FFI功能访问一个动态库。我知道,通过启用LibFFI支持进行构建,这是可能的。我需要采取哪些步骤才能实现这一点?

我主要使用OSX进行开发,但也希望能够将其构建为与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。你必须在OSX网站上咨询你当地的FFI,或者联系Atronix Engineering寻求支持,后者为Rebol添加了FFI功能。)

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

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

-lffi告诉它查找ffi(-l)库,-lxxx表示它假定库的名称为libxxx[something]-L/usr/local/opt/libffi/lib告诉它在哪里寻找它。你必须弄清楚你在哪里(如果在任何地方)有libffi,如果没有得到它。如果你有,目录会有类似的内容:

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

我主要使用OSX进行开发,但也希望能够将其构建为与Linux一起使用。

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

我的旧笔记:

lib-fi-osx-的cat步骤

通过自制安装libfffi

brew安装libffi

在生成的生成文件中将/use/include/libfi添加到-I

将/usr/local/Cellar/libfi/3.0.13/lib/libffi.a添加到生成的生成文件

3.0.13版本的可能有所不同

最新更新