现在的位置: 首页 > 综合 > 正文

erlang的程序打包

2013年09月03日 ⁄ 综合 ⁄ 共 1165字 ⁄ 字号 评论关闭

我们写完一组功能模块后(在erlang中,以module为单位),总是希望这一组模块,可以打包成一个应用,作为一个单独的整个,可以启动,停止,象
mnesia一样。并可以在其它应用中引用。如何来做到这一点呢。每一个应用都是通过application:start系列函数来启
动,application:stop可以停止一个应用。 
一个应用需要一个.app文件来描述,主要描述它包括哪些文件,参数等。 

果在启动erlang的VM时就启动一个应用呢,实际上,我们是没有办法通过VM的参数来直接启动一个自定义应用,有些参数如:start_sasl可以
启动一些内部的标准的build-in应用,但是我们可以给VM一个执行入口,这就象C语言或是java语言的main函数一样,VM启动时,执行这个程
序的入口点,这样就可以在这个入口中执行启动应用的操作。 

这个入口点通过参数-s 来指定。下面我们来看一个例子: 

1.   erl  -s erlycomet_demo 
     这个参数指定,VM启动后,调用erlycomet_demo:start()无参函数 

2.   在erlycomet_demo:start()函数中,我们写如下代码: 
        application:start(erlycomet_demo). 

       

上面这句话,启动一个erlycomet_demo的应用,这里,VM就会在搜索目录中找到erlycomet_demo.app这个文件,如果不到,报
错,如果找到,则按这个文件中的指示,启动erlycomet_demo应用。这一部分可以参看相关的文档,简单的,在erlycomet_demo中一
搬有一个参数{mod,{mod_name_app,[]}} 
        这个参数指示,调用mod_name_app:start(_type,Argu)这个函数。以erlycomet_demo为例,这个调用进入到erlycomet_demo_app:start(_type,Argu)中, 

3. 在erlycomet_demo_app的start(_type,Argu)中,启动 一个supervisor进程,进而启动子进程。如下所示: 
        erlycomet_demo_sup:start_link(Args). 


解了,我们是通过application为单位来打包应用的,那么我们如何才能共用应用呢??比如,我们如何在应用A中使用应用2的功能呢??答应是:以
应用为单位来进行引用,例如:我们要便用mnesia功能,我就就调用mnesia:start()或是在应用A的application中指定,要启动
mnesia。  在OPT中,有很多应用都是相互独立,而又相互引用的。比如:mnesia, crpyto,inet 等。

抱歉!评论已关闭.