在Erlang中,NIF(Native Implemented Function)被用来扩展erlang的某些功能,一般用来实现一些erlang很难实现的,或者一些erlang实现效率不高的功能。 NIF使用C开发,效率和C接近,比纯erlang实现要高。NIF会编译成动态库,直接动态加载到erlang进程空间调用,也是erlang扩展新方法最高效的做法。调用NIF不用上下文的切换开销,但是也有代价,NIF的crash会导致整个Erlang进程crash。 下面讲述如何在Windows下使用NIF扩展Erlang 一、前期准备 1、下载erlang二进制安装包,R16B02 Windows Binary File,前面是版本号。安装过erlang的跳过这一步。 2、安装erlang后,到安装目录取erlang头文件和静态库包: erl头文件:erl5.10.2\erts-5.10.2\include\ erl静态库:erl5.10.2\erts-5.10.2\lib,静态库这里只用到erts_MD.lib 二、编译NIF库 1、新建一个空项目,命名为niftest 2、把erl头文件复制到工程目录下,并添加到工程项目中 3、把erts_MD.lib复制到工程目录下 4、修改项目属性,常规类型选动态库(.dll),字符集选使用 Unicode 字符集 5、修改项目属性,VC++ 目录的包含目录添加“include” 6、把以下代码保存为niftest.c文件,添加进工程
7、编译项目,可以在Debug下找到编译好的erl动态库:niftest.dll
三、在erlang中使用NIF库 1、把以下代码保存为niftest.erl文件,和上面编译的niftest.dll放一起
完整demo下载:http://download.csdn.net/detail/cwqcwk1/6800955 参考 http://blog.csdn.net/mycwq/article/details/17527485 |
|