OPNET 模块计算机类型“X86”与目标计算机类型“X64”冲突 fatal error LNK1112

时间:2024-05-31 19:18:55

OPNET 模块计算机类型“X86”与目标计算机类型“X64”冲突 fatal error LNK1112

通常来说,是可以使用兼容模式,用32位的modeler.exe就不会出什么问题。但是要想使用64位的modeler.exe,并且又出现了如题的问题,可以参考一下这篇文章。

下面仅记录一下自己的修改过程。并不保证遇到相同问题的人能通过同样的方法解决该问题。不过可以试一试,大不了再改回来嘛!

参考文章:    1http://www.docin.com/p-44204938.html

                          2http://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位编译器了。如图。

OPNET 模块计算机类型“X86”与目标计算机类型“X64”冲突 fatal error LNK1112

         Ps:在过程中,还将xxx\MicrosoftVisual Studio 10.0\VC\VCWizards文件夹下的default.vcxprojDefaultTest.vcxprojvcupgradedefault.vcxproj这三个文件夹中的win32全部替换成了x64。不过应该是vs中的项目的默认平台之类的,和本文要改的没什么关系。反正记录一下。)

        

后来不知道自己是又改了什么,出现了“fatalerror LNK 1112:模块计算机类型‘X86’与目标计算机类型‘X64’冲突”的问题。

 

正文:

好吧,终于到正文了。我自己提示的问题应该是bind_so_msvc程序报错。在网上查的资料和根据自己的理解,应该是在链接的时候出的错。具体问题如图:

OPNET 模块计算机类型“X86”与目标计算机类型“X64”冲突 fatal error LNK1112

         而且此时在运行opnet的时候,仍然是32位的地址空间。因此,我认为可能是opnet默认的链接程序仍然是用来链接32位的。

下面的修改过程,参考文章1

Edit->preferences

OPNET 模块计算机类型“X86”与目标计算机类型“X64”冲突 fatal error LNK1112

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

OPNET 模块计算机类型“X86”与目标计算机类型“X64”冲突 fatal error LNK1112

Kernel Type中的选择如下图所示的项;

OPNET 模块计算机类型“X86”与目标计算机类型“X64”冲突 fatal error LNK1112

最好去掉如下图所示项的/wp64(我已经去掉了),不然老提示warning(强迫症患者没办法!)

OPNET 模块计算机类型“X86”与目标计算机类型“X64”冲突 fatal error LNK1112

最开始的时候最好强制编译一下,因为OPNET貌似之前编译过了就不再编译了。(省着出错嘛!最好把之前temp的文件呀都删一删)

OPNET 模块计算机类型“X86”与目标计算机类型“X64”冲突 fatal error LNK1112

转自http://blog.****.net/iamanda/article/details/53484898