【VC++开源代码栏目提醒】:网学会员为需要VC++开源代码的朋友们搜集整理了MICO开发CORBA中间件程序在Linuz和Windows间的实现 - 会议论文相关资料,希望对各位网友有所帮助!
2008年9月 全国抗恶劣环境计算机第十八届学术年会论文集 中国.西安 MICO开发CORBA中间件程序在Linux和Windows间的实现 梁晓江,陈渝 (中船重工集团第707研究所加固机事业部,天津300131) 摘要:结合基于MICO开发CORBA中间件程序的实际经验,分别讨论了在Linux环境下用gcc编译MIC02.3.12并用 MICO自带编译器开发CORBA中间件程序,在Windows环境下用Visual Studio.net 2003编译MIC02.3.12并用VC++ 6.0开发CORBA中间件程序,最后实现Linux下的CORBA中间件程序和WindowB下的CORBA中间件程序互通的方 法。
该方法为利用MICO开发CORBA中间件程序提供了有益的参考,为跨系统异构平台之间网络编程的实现提供了 实际的工作思路。
关键词:MICO;CORBA中间件;nn呱和Windows互通;异构平台 引言 该命令的意思是确认MICO文件的正确性,并指 定准备将MICO程序和库安装右:_Jusr/local目录下;也 CORBA中间件程序的开发已经非常成熟。
实现的 可以不指定安装目录,直接运行方法也很多,并且现在网上提供了很多
开源的方法,揭 configure回车开了CORBA中间件程序实现的神秘面纱,例如MI. 这样就是准备将MICO程序和库安装到当前目录CO、TAO都是实现CORBA中间件程序的
开源方法,但 下。
若没有错误则在终端显示大量确认信息后仍然回是目前很少能找到从编译MICO到用MICO实现 到/root/mico目录下等待。
QORBA中间件程序编写全过程的具体实例,对于很多 接下来运行命令程序开发者,尤其是初学者来说用,编译MICO、并用 export LD—LIBRARY—PATH=/root/mico/orb:MICO实现CORBA中间件程序的开发仍然非常模糊。
¥LD—LIBRARY_PATH回车基于这种情况,本文结合实例,讨论了在Linux系统下 该命令的意恩设置环境变量,是为了在做make和Windows系统下编译MICO,并用MICO编程实现异 install之前运行生成的二进制
代码,并告诉动态链接构平台程序互通的一种方法。
器到/root/mico/目录下寻找附加的共享库。
以上命令都运行正确时,即可在/root/mico/目录1 MICO简介 下运行命令 MICO是Mico is CORBA的缩写,它是实现COR- gmake回车BA(Common Object Request Broker Architecture)程序 该命令是用gcc编译命令编译MICO程序,编译的一种开放的源
代码,它的最初代表是Mini CORBA。
过程出现的错误会在终端中提示出来,当编译完全正MICO的源
代码我们可以从
网络上免费获得。
MICO 确后,就可以运行命令是一个完全符合CORBA的实现。
目前我们可以
免费 gmake install回车获得的最新版本是MICO 2.3.12。
该命令是安装共享库。
以上命令执行正确后,需 要在当前目录下运行命令2 Linux下MICO 2.3.12的编译及程序的开发 ldconfig—v回车2.1 Linux下MICO 2.3.12的编译 该命令的意思是告诉动态链接器生成的新的共享 本文的Linux操作系统用的是Red Hat 9版本,首 库的绝对位置。
先将下载的mico一2.3.12.tar.gz文件解压到指定的 至此.MICO在Linux的编译已经完成,可以用ge- 目录下,本文解压到/root/mico目录下,然后启动Linux dit等编译器编写CORBA中间件的C程序进行开发终端,将光标指定到解压文件的目录下,运行命令 了,需要指出的是以上编译命令全部是以超级用户的 configure prefix=/mr/local回车 身份登录的。
收稿日期:2008,07.03 .52. 全国抗恶劣环境计算机第十八届学术年会论文集 中国·西安=== ==:====::=========:===:: =:: :=:==:::==================================================2.2 int main(int argc,char枣argv〔〕) Linux下用MICO 2.3.12开发CORBA中间件程序 {CORBA::ORB—valr orb=CORBA::ORB—init 本文以常见的简单银行帐户的程序为例进行编 (argc,arsv);程。
先简单介绍一下该
程序的功能,该程序为银行帐 CORBA::Objeet_var poaobj=orb一>resolve_ini·户的对象提供三种操作:存放(deposit)--定数目的钱, tial_references(”RootPOA”);取出(withdraw)一定数目的钱,以及进行结余(bal一 PortableServer::POA—VIII”poa=PortableServer::8LrlCe)查看。
编程过程如下: POA::na.ITOW(poaobj); 用CORBA IDL编写帐户对象的接口声明文件ae. PortableServer::POAManager—var mgr 2 poa一>count.idl,内容如下 the—POAManager(); interface Account{ account—impl牛hello=new account_impl; void amount); PortableServer::Objectld—vat oid 2 poa一>acti— deposit(in unsigned long void withdraw(in unsigned long amount); vate_objcct(hello); long balance(); cout<<”Running….”<<endl: }; mgr一>activate(); 编译account.idl文件,运行命令如下 ‘。
’orb一>run(); idl account.idl回车 poa一>destroy(TRUE,TRUE); 编译成功生成两个文件:account,h和account.CC delete hello; 。
account.h中包含帐户对象实现的基类的类的声明, returnO:account.CC包含这些类的实现和一些支持
代码,这里 }要注意的是MICO 2.3.12不再支持BOA,而是支持 编写client.CC文件,
代码如下PoA(关于BOA、POA的定义读者可以查阅本文的参 #include”account.h”考文献〔1〕),所以account.h中不再包含派生类ac— #include<direct.h>count_skel,读者在结合本文阅读其它MICO相关文献 #ifdef HAVE—UNISTD_H时要注意区分。
#include<unistd.h> 编写server.cc文件,
代码如下 #endif #include”account.h” using namespace std; #ifdef HAVE_ANSI—CPLUSPLUS—HEADERS int main(int argc,char搴argv〔】) #include<fstream> {int cmd; #else . char addr〔256〕; #include<fstream.h> CORBA::ORB—Var orb=CORBA::ORB—init }Iendif (argc,a罾7); using namespace std; CORBA::Object—VIII”obj=orb一>bind(”IDL: class account_impl:virtual public POA_Account Account:1.0”,”inet:XUXU:8888”); {private: if(CORBA::is_nil(obj)){ CORBA::kng_current_balance; COUI<<”cops:could not locate HelloWodd 8el-v· public: er”<<endl: account_impl() exit(1); {current_balance=0;}; } void deposit(CORBA::ULong amount) Account_var hello=Account::._narrow(obj); {_.current_balance+=amount;}; hello一>deposit(300); void withdraw(CORBA::Ubng amount) hello一>withdraw(250); {_current_balance一=amount;}; COUI<<”Balance is” <<hello一>balance() CORBA::Long balance() <<endl: {return current_balance;}; return O; }; l 2008年9月 粱晓江等:MICO开发CORBA中间件程序在Linux和Windows问的实现 ·53· 这里要指出
代码中的bind(”IDL:Account:1. 开发0”,”inet:xuxu:8888”),其中XRXU是本地计算机名字, 3.1 Windows下MICO 2.3.12的编译若是连接其它
计算机应该改为相应计算机的IP地址。
本文的Windows操作系统用的是Windows 2000, 用MICO的相应命令进行编译、链接 首先将下载的mico一2.3.12.tar.gz文件解压到指定 将account.CC,account.h,server.cc,client.CC拷到 的目录下,本文解压到C:/mico/目录下,需要在
系统上 同一目录下,启动Linux终端,转到上述文件所在的目 安装Visual Studio.net 2003及VC++6.O(不是唯一 录下,运行如下命令 的工具,只是解决途径之一)。
查找C:/mieo/目录下 mico—e++一I.一c account.CC一0 account.O 的MakeVars.win32文件,用VC或者Source Insight等 回车/辜生成account.o文件木/ 编辑工具打开(不要用记事本打开,那样会有乱码), mico—e++一I.一c client.CC—O client.O回车 设置变量SRCDIR为MICO目录的位置(不要以反斜/毒生成client.O文件·/ 杠结尾)。
mico—C++一I.一c server.ec—o server.o回车 启动“Visual Studio.net 2003命令提示”,进入/木生成i蛇ryer.o文件毒/ DOS命令符环境,转到C:/mico/目录下,运行命令 mico—ld—I.account.0 client.O/lib/libmic02.3. nmake/f Makefile.win32回车12.80—0 client.out回车 该命令是直接对MICO程序和库进行编译,因为 /幸生成可执行文件client.out文件木/ 在Windows下没用必要运行configure过程,在编译过 mico—ld—I.account.O∞rver.o/lib/libmic02.3. 程中会生成一个名为Win32一bin的目录,编译过程构12.so—O¥erger.out回车 造的所有必须的DLL文件和可执行文件都在这个目 /宰生成可执行文件server.out文件书/ 录下,开发者可以将这个文件夹拷贝到自己喜欢的目 如果库文件libmic02.3.12.80不毛E/lib/目录下,· 录下。
.需要手动将其拷贝到该目录下。
上述
工作完成后,则 3.2环境变量的配置完成了银行帐户实例的CORBA中间件程序编写及编 用鼠标右键点击“我的电脑”,选择“属性”菜单,译。
再选到“高级”页,选择“环境变量”,在系统变量栏中2.3 Linux下运行用MICO 2.3.12开发的CORBA中 选中Path,选择相应“编辑”按钮。
在环境变量中加入间件程序 C:\mico\win32一bin;点击“确定”保存环境变量。
该 启动Linux终端,转到server.out所在的目录下, 设置的目的是以后编程中会自动到C:\mico\win32一运行如下命令 bin目录下查找需要的库文件。
./server.out—ORBIIOPAddr inet:XUXU:8888回车 3.3 Visual C 4-+6.0的设置 若程序运行成功则终端显示Running…,程序处于 首先应该指出,在Windows下用MICO开发COR-等待状态。
BA中间件程序不一定非用VC++6.0不可,本文所 另外启动一个Linux终端,转到client.out所在的 述的只是实现方法之~。
· 目录下,运行如下命令 首先,把MICO的位置告诉VC 6.0,做法如下:启 ./client.out回车 动VC6,从菜单中选择Tools,在下拉菜单中选择Op- 若程序运行成功,则终端显示Balance is 50,程序 tions,在弹出的对话框中选中Directories属性页,在运行结束。
此时若server端的程序未关闭,则每运行 Show directories for:选项栏中Include files,在Directo-一次client端程序,client端相应的显示结余增加50。
ries:标号处添加以下目录至此用MICO开发的CORBA中间件程序在Linux单 C:\mico\win32一bin\include\windows,C:\mico、机的运行成功,若在不同的机器上运行服务端和客户 稍1132一bin\include、端,则在服务端启动程序时运行命令./server.out— 并且通过移动按钮将它们移到
列表的顶部。
然ORBIIOPAddr inet:xxx.xxx.x】。
【.xxx:8888回车,其中 后,在Show directories for:选项栏中选中Library path,x】。
【.xxx.xxx.xxx是服务端所在机器的IP地址。
而客 并在Directories:处添加以下目录户端的源
代码中也要将XUXB改为相应服务端的IP地 C:\mico\win32一bin\lib址即可。
接下来,在Show directories for:选项栏中选中Exe. cutable path,然后在Directories:处添加以下目录3 Windows下MICO 2.3.12的编译及程序的 C:\mico\win32一bin ·54· 全国抗恶劣环境计算机第十八届学术年会论文集 中国·西安 然后,在VC6.0的菜单中选中Project,在其下拉 相应的显示结余增加50。
至此用MICO结合VC开发菜单中选中Settings选项.在弹出的对话框中的Set- 的CORBA中间件程序在Windows单机的运行成功,tings For选项选中All Configures,然后右边选中C/C+ 若在不同的机器上运行服务端和客户端,则在服务端+属性页,在该页的Category选项选中Code Genera- 启动程序时运行命令solver—ORBIIOPAddr inet:x双.tion,然后在Use mn—time library选项中选择Mul. xxx.XXX.xxx:8888回车,其中xxx.xxx.xxx.x】【x是服务tithreaded DLL选项。
接着在Category选项中选中Pre. 端所在机器的IP地址。
而客户端的源
代码中也要将processor,然后在Preprocessor definitions选项中添加一 XLlXtl改为相应服务端的IP地址即可。
WINDOWS,点击“OK”按钮关闭对话框,至此,对VC6.O的设置完成。
4 Linux系统和Windows系统的互通3.4用Visual C++6.0开发CORBA中间件程序 按上述办法编写的银行帐户例程的服务端程序和 将上文中提到的account.idl、client.cpp(由client. 客户端程序分别可以独立的运行于Linux和Windowsec重命名得到)、server.cpp(由solver.cc重命名得到) 操作系统下(先运行服务端程序,再运行客户端程拷贝到同一个文件夹下,启动DOS命令符,转到这个 序)。
只要将IP地址设置正确,就可以顺利的实现跨文件夹下,运行命令idl account.idl回车,生成ac- Linux、Windows两个操作系统的异构平台的CORBAcount.CC和account.h,将account.CC重命名为ac-’ 中间件程序的互通。
count.cpp,建立自己想要的client、8ergel”两个VC工程,将文件account.cpp、account.h、client.cpp添加到 5 结束语client工程中。
将文件account.epp、account.h、server. 本文完整地叙述了一种如何在Linux,Windows下cpp添加到8elvel”工程中,分别用VC6.0进行编译,就 利用MICO 2.3.12实现CORBA中间件程序的方法,可以生.