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

时间:2016-01-10 20:26:01

标签: dll rebol rebol3

我想使用Ren-C Rebol分支中的FFI功能访问动态库。我知道这可以通过在启用LibFFI支持的情况下构建。我需要采取哪些步骤才能启用此功能?

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

2 个答案:

答案 0 :(得分:2)

(注意:这可能是应该添加到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网站,或者可能是为了向Rebol添加FFI功能的支持联系人Atronix Engineering)。 / em>的

然后有必要告诉它你的系统上有libffi的位置。你会发现一条可能只有CLIB= -lm的CLIB行。您可以将其更改为:

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
  

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

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

答案 1 :(得分:1)

我的旧笔记:

cat steps-for-lib-ffi-osx

通过自制软件安装libfffi

brew install libffi

在生成的makefile

中添加/使用/ include / libffi到-I

将/usr/local/Cellar/libffi/3.0.13/lib/libffi.a添加到OBJS中 生成makefile

版本3.0.13可能会有所不同