<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html xmlns:fn="http://www.w3.org/2005/02/xpath-functions"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" href="../../../../doc/otp_doc.css" type="text/css"> <title>Erlang -- Using the IC Compiler</title> </head> <body bgcolor="white" text="#000000" link="#0000ff" vlink="#ff00ff" alink="#ff0000"><div id="container"> <script id="js" type="text/javascript" language="JavaScript" src="../../../../doc/js/flipmenu/flipmenu.js"></script><script id="js2" type="text/javascript" src="../../../../doc/js/erlresolvelinks.js"></script><script language="JavaScript" type="text/javascript"> <!-- function getWinHeight() { var myHeight = 0; if( typeof( window.innerHeight ) == 'number' ) { //Non-IE myHeight = window.innerHeight; } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { //IE 6+ in 'standards compliant mode' myHeight = document.documentElement.clientHeight; } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { //IE 4 compatible myHeight = document.body.clientHeight; } return myHeight; } function setscrollpos() { var objf=document.getElementById('loadscrollpos'); document.getElementById("leftnav").scrollTop = objf.offsetTop - getWinHeight()/2; } function addEvent(obj, evType, fn){ if (obj.addEventListener){ obj.addEventListener(evType, fn, true); return true; } else if (obj.attachEvent){ var r = obj.attachEvent("on"+evType, fn); return r; } else { return false; } } addEvent(window, 'load', setscrollpos); //--></script><div id="leftnav"><div class="innertube"> <img alt="Erlang logo" src="../../../../doc/erlang-logo.png"><br><small><a href="users_guide.html">User's Guide</a><br><a href="index.html">Reference Manual</a><br><a href="release_notes.html">Release Notes</a><br><a href="../pdf/ic-4.2.24.pdf">PDF</a><br><a href="../../../../doc/index.html">Top</a></small><p><strong>ic</strong><br><strong>User's Guide</strong><br><small>Version 4.2.24</small></p> <br><a href="javascript:openAllFlips()">Expand All</a><br><a href="javascript:closeAllFlips()">Contract All</a><p><small><strong>Chapters</strong></small></p> <ul class="flipMenu" imagepath="../../../../doc/js/flipmenu"> <li id="loadscrollpos" title="Using the IC Compiler" expanded="true">Using the IC Compiler<ul> <li><a href="ch_introduction.html"> Top of chapter </a></li> <li title="Introduction"><a href="ch_introduction.html#id2258553">Introduction</a></li> <li title="Compilation of IDL Files"><a href="ch_introduction.html#id2252254">Compilation of IDL Files</a></li> </ul> </li> <li id="no" title="OMG IDL" expanded="false">OMG IDL<ul> <li><a href="ch_basic_idl.html"> Top of chapter </a></li> <li title="OMG IDL - Overview"><a href="ch_basic_idl.html#id2252467">OMG IDL - Overview</a></li> </ul> </li> <li id="no" title="IC Protocol" expanded="false">IC Protocol<ul> <li><a href="ch_ic_protocol.html"> Top of chapter </a></li> <li title="Introduction"><a href="ch_ic_protocol.html#id2259761">Introduction</a></li> <li title="Language mappings and IDL operations"><a href="ch_ic_protocol.html#id2259444">Language mappings and IDL operations</a></li> <li title="IC Protocol"><a href="ch_ic_protocol.html#id2258509">IC Protocol</a></li> <li title="Gen_server Protocol"><a href="ch_ic_protocol.html#id2260392">Gen_server Protocol</a></li> <li title="Erlang Distribution Protocol"><a href="ch_ic_protocol.html#id2260445">Erlang Distribution Protocol</a></li> </ul> </li> <li id="no" title="Using the Plain Erlang Back-end" expanded="false">Using the Plain Erlang Back-end<ul> <li><a href="ch_erl_plain.html"> Top of chapter </a></li> <li title="Introduction"><a href="ch_erl_plain.html#id2263852">Introduction</a></li> <li title="Compiling the Code"><a href="ch_erl_plain.html#id2263869">Compiling the Code</a></li> <li title="Writing the Implementation File"><a href="ch_erl_plain.html#id2263887">Writing the Implementation File</a></li> <li title="An Example"><a href="ch_erl_plain.html#id2263947">An Example</a></li> </ul> </li> <li id="no" title="Using the Erlang Generic Server Back-end" expanded="false">Using the Erlang Generic Server Back-end<ul> <li><a href="ch_erl_genserver.html"> Top of chapter </a></li> <li title="Introduction"><a href="ch_erl_genserver.html#id2266793">Introduction</a></li> <li title="Compiling the Code"><a href="ch_erl_genserver.html#id2266814">Compiling the Code</a></li> <li title="Writing the Implementation File"><a href="ch_erl_genserver.html#id2266839">Writing the Implementation File</a></li> <li title="An Example"><a href="ch_erl_genserver.html#id2266901">An Example</a></li> </ul> </li> <li id="no" title="IDL to C mapping" expanded="false">IDL to C mapping<ul> <li><a href="ch_c_mapping.html"> Top of chapter </a></li> <li title="Introduction"><a href="ch_c_mapping.html#id2266418">Introduction</a></li> <li title="C Mapping Characteristics"><a href="ch_c_mapping.html#id2266527">C Mapping Characteristics</a></li> <li title="Basic OMG IDL Types"><a href="ch_c_mapping.html#id2266704">Basic OMG IDL Types</a></li> <li title="Constructed OMG IDL Types"><a href="ch_c_mapping.html#id2267584">Constructed OMG IDL Types</a></li> <li title="OMG IDL Constants"><a href="ch_c_mapping.html#id2267811">OMG IDL Constants</a></li> <li title="OMG IDL Operations"><a href="ch_c_mapping.html#id2267845">OMG IDL Operations</a></li> <li title="Exceptions"><a href="ch_c_mapping.html#id2268532">Exceptions</a></li> <li title="Access to Attributes"><a href="ch_c_mapping.html#id2268547">Access to Attributes</a></li> <li title="Summary of Argument/Result Passing for the C-client"><a href="ch_c_mapping.html#id2268559">Summary of Argument/Result Passing for the C-client</a></li> <li title="Supported Memory Allocation Functions"><a href="ch_c_mapping.html#id2270185">Supported Memory Allocation Functions</a></li> <li title="Special Memory Deallocation Functions"><a href="ch_c_mapping.html#id2270320">Special Memory Deallocation Functions</a></li> <li title="Exception Access Functions"><a href="ch_c_mapping.html#id2270361">Exception Access Functions</a></li> <li title="Special Types"><a href="ch_c_mapping.html#id2270403">Special Types</a></li> <li title="A Mapping Example"><a href="ch_c_mapping.html#id2270537">A Mapping Example</a></li> </ul> </li> <li id="no" title="The C Client Back-end" expanded="false">The C Client Back-end<ul> <li><a href="ch_c_client.html"> Top of chapter </a></li> <li title="Introduction"><a href="ch_c_client.html#id2270691">Introduction</a></li> <li title="Generated Stub Files"><a href="ch_c_client.html#id2270721">Generated Stub Files</a></li> <li title="C Interface Functions"><a href="ch_c_client.html#id2270776">C Interface Functions</a></li> <li title="Generating, Compiling and Linking"><a href="ch_c_client.html#id2270858">Generating, Compiling and Linking</a></li> <li title="An Example"><a href="ch_c_client.html#id2270927">An Example</a></li> </ul> </li> <li id="no" title="The C Server Back-end" expanded="false">The C Server Back-end<ul> <li><a href="ch_c_server.html"> Top of chapter </a></li> <li title="Introduction"><a href="ch_c_server.html#id2271068">Introduction</a></li> <li title="Generated Stub Files"><a href="ch_c_server.html#id2271099">Generated Stub Files</a></li> <li title="C Skeleton Functions"><a href="ch_c_server.html#id2271154">C Skeleton Functions</a></li> <li title="The Server Loop"><a href="ch_c_server.html#id2271220">The Server Loop</a></li> <li title="Generating, Compiling and Linking"><a href="ch_c_server.html#id2271250">Generating, Compiling and Linking</a></li> <li title="An Example"><a href="ch_c_server.html#id2271320">An Example</a></li> </ul> </li> <li id="no" title="CORBA_Environment C Structure" expanded="false">CORBA_Environment C Structure<ul> <li><a href="ch_c_corba_env.html"> Top of chapter </a></li> <li title="C Structure"><a href="ch_c_corba_env.html#id2271466">C Structure</a></li> <li title="The CORBA Compatibility Part"><a href="ch_c_corba_env.html#id2271562">The CORBA Compatibility Part</a></li> <li title="The External Part"><a href="ch_c_corba_env.html#id2271620">The External Part</a></li> <li title="The Internal Part"><a href="ch_c_corba_env.html#id2271769">The Internal Part</a></li> <li title="Creating and Initiating the CORBA_Environment Structure"><a href="ch_c_corba_env.html#id2271900">Creating and Initiating the CORBA_Environment Structure</a></li> <li title="Setting System Exceptions"><a href="ch_c_corba_env.html#id2272229">Setting System Exceptions</a></li> </ul> </li> <li id="no" title="IDL to Java language Mapping" expanded="false">IDL to Java language Mapping<ul> <li><a href="ch_java.html"> Top of chapter </a></li> <li title="Introduction"><a href="ch_java.html#id2272363">Introduction</a></li> <li title="Specialties in the Mapping"><a href="ch_java.html#id2272427">Specialties in the Mapping</a></li> <li title="Basic OMG IDL Types"><a href="ch_java.html#id2272455">Basic OMG IDL Types</a></li> <li title="Constructed OMG IDL Types"><a href="ch_java.html#id2272864">Constructed OMG IDL Types</a></li> <li title="Mapping for Constants"><a href="ch_java.html#id2272934">Mapping for Constants</a></li> <li title="Invocations of Operations"><a href="ch_java.html#id2272946">Invocations of Operations</a></li> <li title="Exceptions"><a href="ch_java.html#id2273001">Exceptions</a></li> <li title="Access to Attributes"><a href="ch_java.html#id2273015">Access to Attributes</a></li> <li title="Summary of Argument/Result Passing for Java"><a href="ch_java.html#id2273027">Summary of Argument/Result Passing for Java</a></li> <li title="Communication Toolbox"><a href="ch_java.html#id2273090">Communication Toolbox</a></li> <li title="The Package com.ericsson.otp.ic"><a href="ch_java.html#id2273411">The Package com.ericsson.otp.ic</a></li> <li title="The Term Class"><a href="ch_java.html#id2273836">The Term Class</a></li> <li title="Stub File Types"><a href="ch_java.html#id2274123">Stub File Types</a></li> <li title="Client Stub Initialization, Methods Exported"><a href="ch_java.html#id2274190">Client Stub Initialization, Methods Exported</a></li> <li title="Server Skeleton Initialization, Server Stub Implementation, Methods Exported"><a href="ch_java.html#id2274383">Server Skeleton Initialization, Server Stub Implementation, Methods Exported</a></li> <li title="A Mapping Example"><a href="ch_java.html#id2274528">A Mapping Example</a></li> <li title="Running the Compiled Code"><a href="ch_java.html#id2274624">Running the Compiled Code</a></li> </ul> </li> </ul> </div></div> <div id="content"> <div class="innertube"> <h1>1 Using the IC Compiler</h1> <h3><a name="id2258553">1.1 Introduction</a></h3> <p>The IC application is an IDL compiler implemented in Erlang. The IDL compiler generates client stubs and server skeletons. Several back-ends are supported, and they fall into three main groups.</p> <p>The first group consists of a CORBA back-end:</p> <dl> <dt><strong>IDL to Erlang CORBA</strong></dt> <dd> <p>This back-end is for CORBA communication and implementation, and the generated code uses the CORBA specific protocol for communication between clients and servers. See the <strong>Orber</strong> application User's Guide and manuals for further details.</p> </dd> </dl> <p>The second group consists of a simple Erlang back-end:</p> <dl> <dt><strong>IDL to plain Erlang</strong></dt> <dd> <p>This back-end provides a very simple Erlang client interface. It can only be used within an Erlang node, and the communication between client and "server" is therefore in terms of ordinary function calls. </p> <p>This back-end can be considered a short-circuit version of the IDL to Erlang gen_server back-end (see further below).</p> </dd> </dl> <p>The third group consists of backends for Erlang, C, and Java. The communication between clients and servers is by the Erlang distribution protocol, facilitated by <strong>erl_interface</strong> and <strong>jinterface</strong> for C and Java, respectively.</p> <p>All back-ends of the third group generate code compatible with the Erlang gen_server behavior protocol. Thus generated client code corresponds to <span class="code">call()</span> or <span class="code">cast()</span> of an Erlang <span class="code">gen_server</span>. Similarly, generated server code corresponds to <span class="code">handle_call()</span> or <span class="code">handle_cast()</span> of an Erlang <span class="code">gen_server</span>.</p> <p>The back-ends of the third group are: </p> <dl> <dt><strong>IDL to Erlang gen_server</strong></dt> <dd> <p>Client stubs and server skeletons are generated. Data types are mapped according to the IDL to Erlang mapping described in the <strong>Orber User's Guide</strong>.</p> <p></p> </dd> <dt><strong>IDL to C client</strong></dt> <dd> <p>Client stubs are generated. The mapping of data types is described further on in the C client part of this guide.</p> </dd> <dt><strong>IDL to C server</strong></dt> <dd> <p>Server skeletons are generated. The mapping of data types is described further on in the C server part of this guide.</p> </dd> <dt><strong>IDL to Java</strong></dt> <dd> <p>Client stubs and server skeletons are generated. The mapping of data types is described further on in the Java part of this guide.</p> </dd> </dl> <h3><a name="id2252254">1.2 Compilation of IDL Files</a></h3> <p>The IC compiler is invoked by executing the generic <span class="code">erlc</span> compiler from a shell:</p> <div class="example"><pre> %> erlc +'{be,BackEnd}' File.idl </pre></div> <p>where <span class="code">BackEnd</span> is according to the table below, and <span class="code">File.idl</span> is the IDL file to be compiled.</p> <table border="1" cellpadding="2" cellspacing="0"> <tr> <td align="left" valign="middle"><strong>Back-end</strong></td> <td align="left" valign="middle"> <span class="code">BackEnd</span>option</td> </tr> <tr> <td align="left" valign="middle">IDL to CORBA</td> <td align="left" valign="middle"><span class="code">erl_corba</span></td> </tr> <tr> <td align="left" valign="middle">IDL to CORBA template</td> <td align="left" valign="middle"><span class="code">erl_template</span></td> </tr> <tr> <td align="left" valign="middle">IDL to plain Erlang</td> <td align="left" valign="middle"><span class="code">erl_plain</span></td> </tr> <tr> <td align="left" valign="middle">IDL to Erlang gen_server</td> <td align="left" valign="middle"><span class="code">erl_genserv</span></td> </tr> <tr> <td align="left" valign="middle">IDL to C client</td> <td align="left" valign="middle"><span class="code">c_client</span></td> </tr> <tr> <td align="left" valign="middle">IDL to C server</td> <td align="left" valign="middle"><span class="code">c_server</span></td> </tr> <tr> <td align="left" valign="middle">IDL to Java</td> <td align="left" valign="middle"><span class="code">java</span></td> </tr> </table> <em>Table 1.1: Compiler back-ends and options</em> <p>For more details on IC compiler options consult the ic(3) manual page.</p> </div> <div class="footer"> <hr> <p>Copyright © 1998-2010 Ericsson AB. All Rights Reserved.</p> </div> </div> </div></body> </html>