littlebot
Published on 2025-04-14 / 1 Visits
0

【源码】基于C语言的跨语言函数调用支持库

项目简介

本项目是基于C语言开发的libffi库,它提供可移植的高级编程接口,支持各种调用约定。在编译时无法确定函数参数的程序(如解释器程序)里,libffi能作为桥梁,实现从解释器程序到编译代码的调用。同时,它也是实现完整的外部函数接口(FFI)中依赖于机器的底层部分,为不同语言间的函数调用提供支持。

项目的主要特性和功能

  1. 跨平台支持:支持众多不同的架构和操作系统组合,如AArch64(ARM64)在iOS、Linux、Windows上,以及多种其他架构在不同操作系统上的使用。
  2. 运行时函数调用:允许程序员在运行时根据调用接口描述调用任何函数。
  3. 新功能添加:3.3版本增加了RISC - V支持、新的支持GO闭包的API,以及IEEE754 binary128 long double支持等。
  4. 调用约定支持:支持多种调用约定,如PASCAL和REGISTER调用约定(在x86 Windows/Linux上)等。

安装使用步骤

配置项目

  1. 进入要构建libffi的目录,运行libffi源发行版根目录中的“configure”程序。构建libffi需要一个C99兼容的编译器。
  2. 若直接从git托管源构建libffi,“configure”程序可能还不存在,需先运行./autogen.sh,这需要安装autoconf、automake和libtool。
  3. 可使用--prefix配置开关指定libffi库和头文件的安装位置,默认安装在/usr/local
  4. 若要启用额外的运行时调试检查,使用--enable-debug配置开关。
  5. 使用--enable-purify-safety配置开关可在使用Purify时添加额外代码以抑制某些警告,但会使库变慢。
  6. 若不想构建文档,使用--disable-docs配置开关。
  7. 在Windows平台上使用Microsoft的Visual C++编译器构建时,在配置期间使用msvcc.sh包装脚本。对于64位Windows构建,需相应设置CCCXX
  8. 在Windows平台上使用LLVM项目的clang - cl编译器构建时,按示例配置相关参数。
  9. 在MingW环境下使用MSVC构建时,可能需要删除configure中设置fix_srcfile_pathcygpath命令的行。
  10. SPARC Solaris构建需要使用GNU汇编器和链接器,在配置前设置ASLD环境变量。
  11. 对于iOS构建,可使用libffi.xcodeproj Xcode项目。

编译与安装

  1. 配置完成后,输入make进行编译,必须使用GNU make,可从ftp.gnu.org:/pub/gnu/make下载。
  2. 输入make check确保libffi按预期工作,这需要安装DejaGNU。
  3. 输入make install安装库和头文件。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】