项目简介
libffi是一个用于解决不同编程语言间函数调用问题的库,提供了对各种调用约定的可移植、高级编程接口。对于编译时无法确定函数参数的程序(如解释器),它可作为连接解释器程序与编译后代码的桥梁。它是实现完整外部函数接口(FFI)的底层、依赖于机器的一层,上层还需处理不同语言间值的类型转换。
项目的主要特性和功能
- 跨平台支持:支持AArch64、Alpha、ARM、MIPS等架构,以及iOS、Linux、Windows等操作系统。
- 多语言调用:允许不同语言编写的代码相互调用,实现跨语言函数调用。
- 动态调用:程序运行时可按需调用指定函数。
- 功能更新:不断增加新功能支持,如RISC-V支持、GO闭包支持、IEEE754 binary128 long double支持等。
安装使用步骤
安装
- 配置:进入要构建libffi的目录,运行libffi源码根目录中的
configure
程序。若从git仓库获取源码,需先运行./autogen.sh
,这要求安装autoconf
、automake
和libtool
。构建需要C99兼容的编译器。- 可使用
--prefix
指定libffi库和头文件的安装位置,默认安装在/usr/local
。 - 使用
--enable-debug
开启额外的运行时调试检查。 - 使用
--enable-purify-safety
在使用Purify时添加额外代码以抑制某些警告,但会降低库的运行速度。 - 使用
--disable-docs
不构建文档。 - 在Windows平台使用Microsoft的Visual C++编译器时,配置时使用
msvcc.sh
包装脚本;64位Windows构建时,设置CC="path/to/msvcc.sh -m64"
和CXX="path/to/msvcc.sh -m64"
,可能还需适当指定--build
。 - 在Windows平台使用LLVM项目的clang-cl编译器时,按相应格式配置。
- SPARC Solaris构建需要使用GNU汇编器和链接器,配置前需设置
AS
和LD
环境变量。 - iOS构建可使用
libffi.xcodeproj
Xcode项目。
- 可使用
- 编译:配置完成后,使用GNU make编译,输入
make
。若要验证libffi是否正常工作,输入make check
,这要求安装DejaGNU。 - 安装:输入
make install
安装库和头文件。
使用
本项目提供了测试libffi库中Go闭包调用功能的代码。通过准备ffi_cif
结构体、调用ffi_prep_cif
和ffi_prep_go_closure
函数来设置和准备闭包,并使用ffi_call_go
函数进行闭包调用,以验证libffi库在处理Go闭包调用时的正确性和稳定性。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】