我试图从wxFreeChart库运行示例应用程序。在链接编译后出现错误:
wxcode_msw28d_freechart.lib(wxfreechart_lib_xydataset.obj) : fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'
我尝试将链接器选项\ advanced \ target machine切换到MachineX64,但它不起作用。
我正在使用visual studio 2008,有什么建议吗?
感谢您的帮助
答案 0 :(得分:33)
错误是显式的,您正在尝试链接使用不同CPU目标编译的库。可执行映像只能包含纯x86(32位)或纯x64(64位)代码。混合是不可能的。
通过为项目创建新配置来更改目标CPU,仅更改链接器设置是不够的。在右上角的Build + Configuration Manager,Active solution platform组合中,选择New并选择x64。这将创建一个包含多个已修改项目设置的新配置,最重要的是将使用的编译器。
请注意,在VS2010之前,默认情况下,64位编译器不。如果在平台组合中没有看到x64,则需要重新运行setup.exe并打开选项以安装64位编译器。然后还重新运行您可能已应用的任何Service Pack安装程序。
痛苦点较少的可行方法是使用32位版本的库。
答案 1 :(得分:17)
我也遇到了这个问题并找到了解决方案。
首先我如何解决这个问题。我有一个在x86中构建的项目。然后我使用配置管理器添加x64,我遇到了这个问题。
仔细查看BuildLog.htm
,我看到这两个列为链接器选项:
/MACHINE:X64
/machine:X86
我无法在“属性页”对话框中找到我可以更改此内容的任何位置,因此我打开了.vcproj
文件并查找了相应的行并将其更改为:
AdditionalOptions=" /STACK:10000000 /machine:x64 /debug"
问题解决了。
答案 2 :(得分:5)
在我的情况下,它似乎是因为我从32位到新配置(64位)“复制了设置”并且它没有更新库。奇。
1> MSVCRTD.lib(ti_inst.obj):致命错误LNK1112:模块机器类型“X86”与目标机器类型“x64”冲突
这意味着“您的属性 - > VC ++目录 - >库目录“指向一个内置32位库的目录。以某种方式修复!
在我的情况下http://social.msdn.microsoft.com/Forums/ar/vcgeneral/thread/c747cd6f-32be-4159-b9d3-d2e33d2bab55
参考:http://betterlogic.com/roger/2012/02/visual-studio-2010-express-64-bit-woe
答案 3 :(得分:5)
转到项目属性 - >配置属性 - >图书管理员 将目标机器设置为MachineX64(/ MACHINE:X64)
答案 4 :(得分:2)
由于问题是由于编译和目标机器规格不同(x86& x64),请按照以下步骤操作:
这解决了我的问题。
答案 5 :(得分:1)
尝试将。\ release的每次出现更改为x64属性中的。\ x64 \ Release。至少这对我有用......
答案 6 :(得分:0)
我知道这有点旧,但我想我会提供另一个提示。 在我的情况下,我继承了我必须维护的这个应用程序。 VS2008项目带有与C / C ++相同的字符串 - > OutputFIles->“ObjectFIleName”和“程序数据库文件名”(适用于Win32和x64两个平台)。 所以当我构建Win32平台时,它构建得很好,但是当我尝试构建x64时,我得到了错误:
\ Debug64 \ Objects \ common.obj:致命错误LNK1112:模块机器类型“X86”与目标机器类型“x64”冲突
显然,两个模式都将common.obj存储在同一个位置,所以当我尝试构建x64时,链接器会获取现有的目标文件,即x86。
要修复我只是将现有字符串替换为宏“$(IntDir)\”for x64(无引号),并确保宏解析到正确的路径,就像在其他项目中一样。 这解决了我的问题。
答案 7 :(得分:0)
对i00g和Thomas的答案的更新,这次是针对VS2012(有些名字已经改变)。使用配置管理器将x86设置复制到x64目标后,您将遇到问题的原因与之前的情况相同(lib目标在x64配置中不正确)。打开.vcxproj(文本编辑器)并在适当的情况下将MachineX86替换为MachineX64。 (我仍然没有找到属性表上的位置....)这对于静态库来说似乎是必要的。
答案 8 :(得分:0)
在执行步骤“ compile -DIPLIB = NONE filename.cxx ”之前 将VIsual Studio的安装路径放到vcvarsall批处理文件中,然后更改配置,如下所示。
* C:\ apps \ MVS9 \ VC \ vcvarsall.bat x86_amd64 *
现在下一步应该是
编译-64bit -DIPLIB = none filename.cxx
这解决了我的问题
答案 9 :(得分:0)
谢谢你的回答。我的问题是我只在Visual Studio中将x64解决方案更改为32位。我最后只是创建一个32位的新解决方案,然后复制我的C ++代码,这个错误消失了。我认为l00g33k和RogerAttrill的建议可能是解决方案,但我的工作也是如此。
答案 10 :(得分:0)
最近,我也遇到了这个问题。那是因为我在vs x64
中使用了qt(win32
)。如果您想使用qt应用x64
,您可以选择vs x64
- 如上所述。如果您想使用win32
,也许您还没有,则需要下载qt(32bit
),然后正确设置您的环境,例如lib
目录等。 (注意:如果你将win32或x64转换为另一个,x64(other version)
包括旧目录,可能你在Additional Dependencies
中设置了旧版本。)
答案 11 :(得分:0)
此问题与链接器无关,因此修改它的设置不会影响结果。你得到这个是因为我假设你试图以x86为目标,但由于某种原因,wxcode_msw28d_freechart.lib被构建为x64文件。
尝试查看wxcode_msw28d_freechart.lib及其派生的源代码。你的问题在那里发生。看看是否有一些特殊的构建步骤使用了错误的工具集(x64而不是x86)。
答案 12 :(得分:0)
基于这些答案-我还必须在Librarian->命令行->其他选项(针对x64平台)下修改X86参考