关于这个目录下的基本SML/NJ C接口的说明。此文件提供有关添加的安装说明和详细信息使用SML/NJ C将ML可调用的C函数传递给SML/NJ运行时系统接口。通过这个接口,可以调用C函数传递(并返回)整数、浮点、双精度数、数组、结构和联合,和功能。C函数还可以向ML返回任意C指针ML程序以后可能会作为参数提供给C函数。文件“smlnj-c.ps”是“”中的一张纸/doc的目录描述了C接口的设计、实现和操作。它包含从SML/NJ调用C函数的示例。将bug、评论和问题发送给“sml-nj@research.bell-labs.com网站'1安装--------------该接口由两部分组成:SML/NJ运行时中的C部分和必须显式加载到运行的SML/NJ中的ML部件C接口运行时)。C部分已包含在SML/NJ中C运行时,但必须显式配置。1.1构建C接口运行时------------------------------------运行时系统在“src/runtime/c-libs/smlnj-ccalls”目录。你必须明确构建支持此接口的运行时,如下所示:如果文件“runtime/objs/mk”。--ccalls没有存在,通过以下方式创建一个:(0)克隆“mk”。-'作为'mk。--ccalls的(1) 将-DC_CALLS添加到makefile的DEF变量(2) 确保makefile将XCLIBS定义为:XCLIBS=/c-libs/smlnj-ccalls/libsmlnj-调用.a(3) 确保将XCLIBS传递给“所有”的“make”目标为:XCLIBS=“$(XCLIBS)”此文件附带了一个示例生成文件(mk.mpseb-irix5-c-calls)。通过发出以下命令构建C接口运行时品牌-f mk。--ccalls公司在“runtime/objs”目录中。移动生成的“运行”。-'文件到适当的目录(通常为“bin/.run”)。SML/NJ-C接口的第二部分是一个ML代码库声明用于构造可传递给C函数的数据的数据类型。本部分还提供了注册C函数的工具ML可以调用。接口的这一部分必须加载到SML/NJ系统中然后可以注册并调用C函数。1.2安装SML接口库----------------------------------------ML接口库位于该目录中。重要文件包括:“c-calls.sig.sml”、“c-calls.sml”和“cc-info”。.sml’。“c-calls”文件就是界面。接口是一个函子(CCalls)由有关底层C编译器的信息参数化(通过“cc-info”。.sml文件)。cc-info文件是提供C接口的SML结构(CCalls functor)提供有关C编译器的信息。shell脚本gen-cc-info可用于自动生成一个cc-info。给定编译器的.sml。用法:gen-cc-info cc-to-use-name-for-structure>oufile即:%gen-cc-info gcc GCCInfoX86Linux>cc-info.x86-linux.sml(确保您在指定的平台上运行gen-cc-info命令!)。或者,可以手动创建cc-info文件。例如,请参见,cc-info.defaults.sml(应该适用于大多数32位平台)或cc-info.mipseb-irix5.sml“sources.cm”文件允许SML/NJ编译管理器(cm)构建接口。在sml-cm提示符下,执行“cm.make()”。或者,文件“load.sml”显示了如何将其组合在一起。在顶层“使用”它会在接口上创建一个实例(以及该接口使用的实用程序函数)。2用途-------2.1添加C函数----------------------按照C函数中的上述链接安装运行时在“src/runtime/c-libs/c-calls/cutil.c”中。定义的C函数在“cutil.c”中绑定到ML程序可以通过其找到的名称文件“cutil cfuns.c”。从导入到SML/NJ的每个函数“cutil.c”有一行,例如:C_CALLS_CFUNC(“上提”,上提,char*,(void*))在“cutil-cfuns.h”中。此行注册C函数“topic”名称为'optic',返回类型为'int',参数类型为'char*'使用SML-NJ运行时。每个必须存在C_CALLS_CFUNC行用户C函数可从ML调用。文件“cutil-cfuns.h”必须包含在文件“cfun-list.h”中。添加一组相关函数时,将其“*-cfuns.h”文件中的C_CALLS_FUNC条目,然后将其包括在内来自“cfun-list.h”的文件。例如,要添加c的新文件“f.c”函数,使用C_CALLS_CFUNC定义创建文件“f-cfuns.h”“f.c”导出的所有函数。将“#include”f-cfuns.h“”添加到“cfun-list.h”。编辑“makefile”以生成“f.o”,即将“f.o”添加到makefile的C_CALLS_OBJS变量并为“f.o”添加规则(例如,请参阅“cutil.o”规则)。2.2 C库中的链接--------------------------添加C函数可能需要链接到某些C库SML-NJ运行时当前未与之链接。这些库可以如下链接。编辑“src/runtime/objs/mk”。--调用并更改LD_LIBS变量以包含所需的库。例如,LD_LIBS=-lX11-lm-lmalocmalloc、math和X11库中的链接。2.3从ML调用C函数-------------------------------有关注册和调用已添加到运行时系统的C函数。此目录中的文件“cutil.sml”提供了一些示例。3.0样品“mk。--ccalls”文件。----------------------------------------#mk.mpseb-irix5-ccalls公司#外壳=/bin/shCC=CC-xansi-D_STDC__CPP=/usr/lib/acppCFLAGS=-OAS=/bin/AS-nocppRANLIB=ar ts(随机数)#XOBJS=xmonitor.o#LD_LIBS=-lX11_s-lmaloc#BASE_DEFS=-DHEAP_MONITORXOBJS公司=XLIBS公司=XCLIBS=/c-libs/smlnj-ccalls/libsmlnj-调用.aLD_LIBS=-lmaloc基础_DEFS=DEFS=$(BASE_DEFS)-DHOST_MIPS-DTARGET_MIPS-DOPSYS_UNIX-DOPSYS_IRIX5-DCALLEESAVE=3-DC_CALLS目标=MIPS版本=v-mipseb-irix5RUNTIME=运行.mipseb-irix5全部:(使RUNTIME=“$(RUNTIME)”VERSION=“$))