Windows下使用NIF扩展Erlang方法
在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文件,添加进工程
#ifdef _WIN32
# define WIN32_LEAN_AND_MEAN
# include <Windows.h>
# pragma comment(lib, "erts_MD.lib")
#endif#include "erl_nif.h"static ERL_NIF_TERM hello(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{return enif_make_string(env, "Hello world!", ERL_NIF_LATIN1);
}static ErlNifFunc nif_funcs[] =
{{"hello", 0, hello}
};ERL_NIF_INIT(niftest,nif_funcs,NULL,NULL,NULL,NULL)
7、编译项目,可以在Debug下找到编译好的erl动态库:niftest.dll
/******** 无情的分割线 ********* / 作者:没有开花的树 博客:blog.csdn.net/mycwq
/ ******* 无情的copy *********/
三、在erlang中使用NIF库
1、把以下代码保存为niftest.erl文件,和上面编译的niftest.dll放一起
-module(niftest).
-export([init/0, hello/0]). init() -> erlang:load_nif("./niftest", 0).hello() -> "this function is not defined!".
2、运行erlang代码
1>c(niftest).
{ok,niftest}2> niftest:hello().
this function is not defined!3> niftest:init().
ok4> niftest:hello().
"Hello world!"
完整demo下载:http://download.csdn.net/detail/cwqcwk1/6800955
参考
http://blog.csdn.net/mycwq/article/details/17527485
http://www.erlang.org/doc/man/erl_nif.html
Windows下使用NIF扩展Erlang方法相关推荐
- windows下编译php扩展,windows下开发并编译PHP扩展的方法_php
现在就简单说一在WINDOWS下开发php扩展的步骤: 首先需要准备的软件有: cygwin 安装路径e:/app/cygwin visual studio C++ 6.0, 修改环境变量,把已经安装 ...
- Windows 下开发PHP扩展资源
1.Windows 下开发PHP扩展 http://www.shinrun.com/htmls/100101-37.html 2.windows下开发PHP扩展dll(无需Cygwin) http:/ ...
- cygwin学习linux命令,cygwin 在windows下使用linux命令的方法
cygwin 在windows下使用linux命令的方法以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 但是cygwin ...
- iis怎么更换php版本,Windows 下PHP+IIS的安装方法(PHP版本为5.0)
Windows 下PHP+IIS的安装方法(PHP版本为5.0) 最近需要使用下PHP相关的东西,查找了一些资料,现将PHP配置方法记录一下,以免以后忘记,呵呵,初学者,各位同学不要拍砖,开始正题,主 ...
- [转]cscope在windows下使用mingw编译的方法
cscope在windows下使用mingw编译的方法 http://blog.csdn.net/mslk/archive/2007/05/06/1598513.aspx cscope在wi ...
- springBoot JPA 数据库字段(实体类)带下划线在扩展findBy方法时出错的解决办法
springBoot JPA 数据库字段(实体类)带下划线在扩展findBy方法时出错的解决办法 参考文章: (1)springBoot JPA 数据库字段(实体类)带下划线在扩展findBy方法时出 ...
- windows 下的CACTI的安装方法
windows 下的CACTI的安装方法 记得第一次工作的时候,主管非得让我学在windows 下的CACTI的安装,把我急的,明明是Linux下的东东,硬让我在windows下面装,不过有不敢不听话 ...
- 5.7.24mysql 配置安卓,安卓按键精灵连接MySQL全面解析Windows下安装 mysql5.7的方法
关于在windows下安装mysql 5.7 •要注意的新坑: 5.7版本安装后ROOT账号是有默认的密码的,这个密码在windows下可以在mysql.ini配置文件指定的data文件夹下面,那个为 ...
- Windows下opencc安装及使用方法
Windows下opencc安装及使用方法 安装方法 1.获取opencc安装包 获取链接https://github.com/BYVoid/OpenCC/wiki/Download 2.选择适合自己 ...
最新文章
- 判断页面元素存在与否
- 【CVPR2021】旷视研究院入选学术成果盘点
- 数据中心夏季如何防雷
- alexnet训练多久收敛_AlexNet浅析
- Eclipse新建web项目出现The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path
- 实验5: IOS的升级与恢复
- java判断线段是否相交函数_计算几何-判断线段是否相交
- Java中正则表达式替换字符串
- 路径中,连续多个目录分隔符不影响,仍按照一个处理
- 职场:如何成为PPT高手【01思维篇】
- 为什么会有hash冲突?
- 软考系统集成项目管理工程师 | 计算题公式汇总
- 简易解inode802.1x认证实战(6)交叉编译
- 经典单片机c语言教程 pdf下载,51单片机经典教程.pdf
- 2021云计算技能竞赛真题
- 羽素携手维琪共展科研实力,造护肤“芯”产链
- python path包的使用详解
- linux 进程rt,RTLinux进程调度策略总结
- 如何保证游戏长盛不衰
- vnpy2.0与simnow搭建简单的量化策略开发环境
热门文章
- USB学习笔记(4)STM32关于USB库的解读
- 随机生成车牌号码 解决出现不符合规则的车牌号
- 如果学号的前两位表示年级,要查找98级女生的姓名,请写出相应的SQL语句
- mysql数据库实验报告四
- 这样回复你微信的人,最值得深交
- win10原生输入法间隔变大解决办法
- 《正在到来的数据革命:大数据》阅读笔记
- 诚之和:网络安全已成为最紧迫、最基础的安全问题,监管制度已在路上
- 笔记本 重启 自动修失败 C:WindowsSystem32LogfilesSrtSrtTrail.txt 的 若干解决方法
- Package name 'com.cetc52.platform' does not correspond to the file path 'java.com.cetc52.platform'问题