OPNET 模块计算机类型“X86”与目标计算机类型“X64”冲突 fatal error LNK1112
通常来说,是可以使用兼容模式,用32位的modeler.exe就不会出什么问题。但是要想使用64位的modeler.exe,并且又出现了如题的问题,可以参考一下这篇文章。
下面仅记录一下自己的修改过程。并不保证遇到相同问题的人能通过同样的方法解决该问题。不过可以试一试,大不了再改回来嘛!
参考文章: 1、http://www.docin.com/p-44204938.html
2、http://www.p-englmann.de/中fatal errorLNK 1112的部分
3、http://blog.163.com/zhoumhan_0351/blog/static/39954227200982611422889/ 这个是opnet与vc联合调试
没耐心的请直接跳到正文部分。
前言:
由于想将OpT_Int64类型的变量逻辑左移24位,结果发现使用printf("%I64x/n",a);打印的结果仅剩最低的8位存在,前面的24位惊人被移没了,明明是64bit的变量,怎么会!?
后来发现是使用的32bit的地址空间,最初以为是自己使用的是OPNET\14.5.A\sys\ pc_intel_win32\bin文件夹下的modeler.exe,但是在运行OPNET\14.5.A\sys\pc_amd_win64\bin\中的modeler.exe之后发现,仍然显示的是32bit的地址空间。
在咨询度娘的时候,发现这个问题可能跟vs的编译器有关,在cmd中运行cl,发现果断是32位的编译器。因此,更改了环境变量。
lib: xxx\Microsoft Visual Studio10.0\VC\lib\amd64; C:\Program Files (x86)\Microsoft SDKs\ Windows\v7.0A\Lib\x64;xxx\OPNET\14.5.A\sys\pc_amd_win64\lib;
path: xxx \Microsoft Visual Studio10.0\VC\bin\amd64; G:\ProgramFiles\OPNET\14.5.A\sys\pc_amd_win64 \bin;
反正找到自己的安装文件下的这些文件夹加到环境变量就好了,然后再cmd中输入set,更新环境变量。
在cmd中输入cl,发现变成64位编译器了。如图。
(Ps:在过程中,还将xxx\MicrosoftVisual Studio 10.0\VC\VCWizards文件夹下的default.vcxproj、DefaultTest.vcxproj和vcupgradedefault.vcxproj这三个文件夹中的win32全部替换成了x64。不过应该是vs中的项目的默认平台之类的,和本文要改的没什么关系。反正记录一下。)
后来不知道自己是又改了什么,出现了“fatalerror LNK 1112:模块计算机类型‘X86’与目标计算机类型‘X64’冲突”的问题。
正文:
好吧,终于到正文了。我自己提示的问题应该是bind_so_msvc程序报错。在网上查的资料和根据自己的理解,应该是在链接的时候出的错。具体问题如图:
而且此时在运行opnet的时候,仍然是32位的地址空间。因此,我认为可能是opnet默认的链接程序仍然是用来链接32位的。
下面的修改过程,参考文章1。
Edit->preferences
1、搜索kernel,修改DiscreteEvent Simulation.Code Generation.Compilation中的Compile for 64-Bit,Development, Sequential Kernel项为TRUE;这个的意思应该是编译进程过程中使用64位地址空间。
2、搜索comp_prog,修改DiscreteEvent Simulation.Code Generation.Compilation下的C Compilation Script项为xxx\OPNET\14.5.A\sys\pc_amd_win64\bin\comp_msvc.exe(请找到自己安装文件夹下的)。如果是c++,请更改c++ compilation script。
3、搜索bind_static_prog(静态链接器),修改StaticSimulation Linking Script项为xxx\OPNET\14.5.A\sys\pc_amd_win64\bin\bind_msvc.exe。
4、搜索bind_shobj_prog(动态链接器),修改NetworkRepositories Linking Script项为xxx\OPNET\14.5.A\sys\pc_amd_win64\bin\bind_so_msvc.exe。
5、搜索bind_static_flags(静态链接器标志),修改64-BitStatic Simulation Flags项为/LIBPATH:xxx\OPNET\14.5.A\sys\pc_amd_win64\lib /DEBUG。(/ DEBUG前面有个空格)
6、搜索bind_shobj_flags(动态链接器标志),修改64-BitNetwork Repositories Flags项为/LIBPATH:xxx\OPNET\14.5.A\sys\pc_amd_win64\lib /DEBUG。
总结:修改了以下几项:
Compile for64-Bit, Development, Sequential Kernel
comp_prog
bind_static_prog/bind_shobj_prog
bind_static_flags/bind_shobj_flags
最终在configure/run的时候,simulation设置为development;
Kernel Type中的选择如下图所示的项;
最好去掉如下图所示项的/wp64(我已经去掉了),不然老提示warning(强迫症患者没办法!)
最开始的时候最好强制编译一下,因为OPNET貌似之前编译过了就不再编译了。(省着出错嘛!最好把之前temp的文件呀都删一删)
转自http://blog.csdn.net/iamanda/article/details/53484898