1、 OPNET 安装完成之后,需要测试环境变量设置是否正确,一般是通过对opnet自带对的示例仿真,但有可能出现如问题1所述的情况: 问题1: <<< Recoverable Error >>> | Process model (aodv_rte) compilation failed | Errors given in file (C:\Users\Administrator\op_admin\tmp\cc_err
2、5640) 这可能是由于两个方面的原因: 1、使用的可能是标准库,也可能是empty,这时候如果示例中会用到标准库中的一些东西,就会报错,可以通过设置得到:在project编辑器下,edit->preference,打开后搜索repositories,设置Network Simulation Repositories的value值为stdmod,即标准模型,此时在运行仿真,则会变得正确,如果这样设置后还有错误,说明应该是环境变量设置有问题。如图1所示。 图1 2、使用自己建立的模型进行仿真时,如果出现如图2所示的问题: 问题2: <<< Program
3、 Abort >>>The set of models necessary for running the simulation is incomplete.Check that all the 'repositories' attributes are complete.T (0), EV (-), MOD (NONE), PROC (sim_load_repos_load) 图2 这是因为我们用的模型库已经不是标准的模型库了,我们是自己创建的模型库,所以需要修改设置:就是将问题1设置的Network Simulation Repository值stdmod删除,变回empty,如图
4、3所示。 图3 这样仿真就会正确了。 即使repository设置正确,有可能还会出现其它问题,以下几个是我遇到的: 问题3: fatal error C1074: 'IDB' is illegal extension for PDB file(fatal error C1074: “IDB”是 PDB 文件的非法扩展) 这个问题主要是有兼容性问题造成的,我的系统时win7 32旗舰版,opnet14.5a以及vs2010,打开opnet和vs程序的属性,在兼容性里设置如图4、如图5所示。 图4 图5 问题4: Error
5、s reported by the binder program follow (these messages have been saved in (C:\Users\Answer\op_admin\tmp\bind_err_8944): LINK : fatal error LNK1181: cannot open input file 'kernel32.lib' 或者 LINK : fatal error LNK1181: cannot open input file 'windef.h' 这个问题主要是有环境变量设置中没有把一些库函数包含进去,有两个可能,第一,环境
6、变量自己设置路径有误,如果检查无误之后,有可能就是因为有些文件opnet包含的时候是小写开头的文件,而不同的vs版本的这些文件可能时大写开头的,解决方法就是在vs安装报下搜索无法打开的文件,如果该文件所在的路径没被包含进去,则包含其路径,如果文件名称存在大小写的问题,将文件中的名称改掉,如:Kernel.lib改为kernel.lib。 问题5: <<< Recoverable Error >>> Object repository construction failed due to errors encountered by the binder program (
7、bind_so_msvc) T (0), EV (-), MOD (NONE), PROC (sim_load_repos_rebuild) 从网上找了这个问题的一些资料,有一个人是这样说的: 出现这个错误一般是编译连接出错unresolved external symbol,常见的有以下可能性: (1)Pipeline Stage (C code)文件名与函数名不一样,这时改为同名就行了。 (2)进程模型用到一个无法定位的外部函数,这时在进程模型编辑器中选择 File->Declare External Files…,然后选中含有该外部函数的外部文件。 (3)外部文件用到
8、一个无法定位的函数,这时查看是否漏掉include 需要用到的头文件。 这个问题如果是伴随着问题4的问题,那么问题4解决了之后,它也就消失了就如第三点说的一样,至于是不是无法定位一个外部函数,这个得开自己的进程模型中有没有用到这个外部函数了,用到的话肯定需要声明呐!至于第一条的情况,我还没那么幸运遇到,无能为力。 问题6: Errors reported by the binder program follow (these messages have been saved in (C:\Users\Answer\op_admin\tmp\bind_err_5000):Cre
9、ating library E:\study\bachelor\opnet\op_models\event_list\event_list_example-scenario1.dev32.i0.nt.lib and object E:\study\bachelor\opnet\op_models\event_list\event_list_example-scenario1.dev32.i0.nt.exp LINK : fatal error LNK1207: incompatible PDB format in 'E:\study\bachelor\opnet\op_models\event
10、list\event_list_example-scenario1.dev32.i0.nt.pdb'; delete and rebuild 这句话的意思是重新生成项目,即删除所有编译期间生成的临时文件,重新编译生成一次,那就将它指定的那个文件找到,重新打开编译一遍就好了。 下面附一些网友们总结的其他问题(我自己没有遇到过,不能检测其正确与否): 问题1: fatal error LNK1101: MSPDB100.DLL 的版本不正确;请再次检查此产品的安装 解决:因为VC\Bin\下没有“msobj100.dll,mspdb100.dll,mspdbcore.dl
11、l,mspdbsrv.exe”这四个文件,解决的方法:直接从Common7\IDE\下复制这四个文件到VC\Bin\下即可解决。 问题2:Invalid Memory Access 内存无效访问是调试程序中最常碰到的错误,一般是程序中的指针出了问题,可以尝试用以下办法来解决: (1)在edit->preference 中给comp_flags 加/Od /Zi 字段,给bind_shobj_flags 加/DEBUG 字段; (2)在edit->preference 中找到handle_exception,将TRUE 改为FALSE,这样程序中的异常就可以由VC 来调试
12、 (3)运行仿真,如提示出现异常,点击cancel,则自动打开VC,并且debug 会停留在发生异常的指针处。但是有时候VC 的debug 有可能停留在让人看不懂的汇编语言处,此时可以观察发生错误的事件event_id 值,在ODB 调试的时候使用evstop 指令设置断点,让程序中断在出错的事件前,接下来可以采取下列两种方法之一: (1)采用OPNET 与VC 联合调试,在VC 中通过单步执行查看; (2)用ODB 的next 指令一个一个时间看,往往配合ltrace 和fulltrace 指令查看程序运行状况。碰到这个问题我们也可以缩短仿真时间,在确保仿真能够完成前提下,在仿真属性
13、中选择Advanced->Profiling->Collect detailed profiling for function,之后出现每一个内存使用的统计。
问题3:
No true transitions from state ()
T(), EV(), MOD(), PROC (sim_pro_err_transit)
状态程序执行完毕找不到出口,有限状态机要能够正常运行要求在任意条件下,每个
状态执行完毕之后都必须发生转移,出错的情况有以下两种:
a)根本没有转移条件及相应的状态。
b)没有满足条件的转移。
问题4:
Unable to write file (*.pr.m) compilation failed
Source code file couldn't be generated
查看模型文件属性是否设置为只读,编译模型文件需要刷新其内容,去掉只读属性。
问题5:
<<