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().
ok 4> 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扩展
一.编译PHP 转自:http://demon.tw/software/compile-php-on-windows.html 编译PHP扩展必需的一些头文件需要从php源码中获取,其中有一些配置性的 ...
- Windows下安装PHP扩展及资源下载地址(memcached为例)
官方下载的php安装包ext目录里以经包含了常用的php扩展,但某些情况下并不能满足我们项目需求,比如memcache扩展就不在官方的php安装包里.这时就需要我们自己去下载安装. 本文列出php官方 ...
- Windows下的环境搭建Erlang
Windows下的环境搭建 Erlang 一.安装编译器 在http://www.erlang.org/download.html下载R16B01 Windows Binary File并安装. 二. ...
- windows下安装MongoDB扩展和配置
windows下安装MongoDB扩展和配置 1.下载mongoDB扩展,根据当前php版本进行下载 地址如下:http://pecl.php.net/package/mongo 我本地php版本是 ...
- windows下开发PHP扩展dll(无需Cygwin)
windows下开发php扩展网上很多资料都说需要Cygwin,其实完全可以不必安装该东东.没错,是可以在linux下生成骨架后拷到windos下来用,但是,如果没有linux环境呢?什么,装虚拟机? ...
- windows 下解决 Time_Wait 和 CLOSE_WAIT 方法
修改Time_Wait参数的方法 (在服务端修改)Windows下在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Paramet ...
- windows下开发PHP扩展(无需Cygwin)
第一步:准备 1.php源码包和windows下的二进制包,以及安装Visual C++,并把Microsoft Visual Studio/Common/MSDev98/Bin的绝对路径添加到win ...
- Windows下PHP多线程扩展pthreads的安装
pthreads扩展安装步骤 1.查看phpinfo() 获取PHP版本号及位数(x86表示32位,x64表示64位).编译器版本.PHP配置文件加载所在位置等.如下图所示: 2.pthreads扩展 ...
- Windows下GNU之gcc体验方法
Windows 现在在Windows下开发C/C++程序一般都是用微软的编译器,当年的Borland已经成为传说.但是如果你不想付钱的话,也可以考虑Windows下的GCC. 在Windows下体验G ...
随机推荐
- php里少用到的session_module_name,以及session的key值限制,简单将session存储为json格式数据的方法
这个函数的作用就是动态的设置php.ini里的session_save_handler,配合session_set_savepath可以在程序里自由配置session的后台方式. session_ca ...
- 2015年目标一:学习掌握python
俗话说:凡事预则立,不预则废.又到新的一年,给自己确定第一个目标:学习python.掌握python基本用法.其实2014年已经断断续续接触过python,但一直是不系统地在学习,而且基本上没有把py ...
- myeclipse安装
http://www.cnol.cc/2013/1427.html(我用这个) http://www.myeclipseide.cn/windows.html http://download.csdn ...
- Android数据库升级,数据不丢失解决方案
假设要更新TableC表,建议的做法是: 1) 将TableC重命名为TableC_temp SQL语句可以这样写:ALERT TABLE TableC RENAME TO TableC_temp; ...
- LoadRunner error -27728
错误现象1:Action.c(16): Error -27728: Step download timeout (120 seconds) has expired whendownloading no ...
- bzoj 1806 [Ioi2007]Miners 矿工配餐(DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1806 [题意] 给定一个权在1..3内的序列,在保持相对位置不变的情况下拆分成两个序列 ...
- Native App、Web App 还是Hybrid App?
一.什么是Native App? Native App即原生应用,即我们一般所称的客户端,是针对不同手机系统单独开发的本地应用,如需使用需要先下载到手机并安装,下载Native App的最常见方法是访 ...
- 使用JavaMail API发送邮件
发送邮件是很常用的功能,注册验证,找回密码,到货通知,欠费提醒等,都可以通过邮件来提醒. Java中发送邮件需要使用javax.mail.jar包,读者可以上网搜索或去官方下载,下载地址为: 下面贴上 ...
- easyui不提交window中的form表单数据
<form id="ff" method="post">, <div id="win" class="easyu ...
- 在适配iPhone 6 Plus屏幕的时候,模拟器上两边有很细的白边如何解决
取消掉Constrain to margin 然后添加左右约束 版权声明:本文为博主原创文章,未经博主允许不得转载.