项目简介
本项目是基于C语言开发的libffi库,提供可移植的高级编程接口来处理各种调用约定。此库能让程序员在运行时调用由调用接口描述指定的函数,为不同语言编写的代码搭建交互桥梁,常用于解释器程序与编译代码的交互场景。
项目的主要特性和功能
- 跨平台支持:可移植到众多平台,涵盖多种架构(AArch64、Alpha、ARM等)和操作系统(iOS、Linux、Windows等)。
- 动态函数调用:程序在编译时无需知道传递给函数的参数,能在运行时动态决定调用的函数和参数。
- 闭包功能支持:提供闭包功能测试代码,可验证闭包在运行时动态绑定函数和参数的能力。
- 多种调用约定支持:支持PASCAL、REGISTER、stdcall、thiscall、fastcall等多种调用约定。
- 数据类型支持:支持C99 Complex Type等多种数据类型。
安装使用步骤
配置项目
- 进入要构建libffi的目录,运行libffi源代码分发根目录中的
configure
程序。构建需兼容C99的编译器。 - 若直接从git托管源构建,先运行
./autogen.sh
,需安装autoconf
、automake
和libtool
。 - 可用
--prefix
配置开关指定libffi库和头文件的安装位置,默认安装在/usr/local
下。 - 启用额外运行时调试检查,使用
--enable-debug
配置开关。 - 使用Purify与libffi,使用
--enable-purify-safety
配置开关,但会降低库的运行速度。 - 不想构建文档,使用
--disable-docs
配置开关。 - 在Windows平台使用Microsoft的Visual C++编译器构建时,配置时使用
msvcc.sh
包装脚本:path/to/configure CC=path/to/msvcc.sh CXX=path/to/msvcc.sh LD=link CPP="cl -nologo -EP" CPPFLAGS="-DFFI_BUILDING_DLL"
对于64位Windows构建,使用CC="path/to/msvcc.sh -m64"
和CXX="path/to/msvcc.sh -m64"
,可能还需适当指定--build
。 - 在Windows平台使用LLVM项目的clang - cl编译器构建时:
path/to/configure CC="path/to/msvcc.sh -clang-cl" CXX="path/to/msvcc.sh -clang-cl" LD=link CPP="clang-cl -EP"
在MingW环境下使用MSVC构建时,可能需要删除configure
中设置fix_srcfile_path
为cygpath
命令的行。 - SPARC Solaris构建需要使用GNU汇编器和链接器,在配置前将
AS
和LD
环境变量指向这些工具。 - 对于iOS构建,可使用
libffi.xcodeproj
Xcode项目。
构建项目
配置完成后,使用GNU make进行构建,可从ftp.gnu.org:/pub/gnu/make
下载GNU make。在命令行输入:
make
测试项目
为确保libffi按预期工作,可进行测试,这需要安装DejaGNU。在命令行输入:
make check
安装项目
若测试通过,可安装库和头文件,在命令行输入:
make install
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】