致命错误 LNK1112:模块机器类型“X86”与目标机器类型“x64”冲突

发布于 2024-12-26 02:38:39 字数 754 浏览 0 评论 0原文

我使用 Visual Studio 2010 Premium。我有两个项目 A 和 B,我尝试将它们编译到 64 位平台。
项目 A 输出项目 B 所依赖的 .dll 和 .lib 文件。
我已经成功地将项目 A 编译到 64 位平台,但是当我编译项目 BI 时出现以下错误:

mfcs100d.lib(nolib.obj):致命错误 LNK1112:模块机器类型“X86”与目标机器类型“x64”冲突

可能是什么问题?我真的不知道这个 mfcs100d.lib 文件是什么。
我在项目 A 的 dll 文件上使用了“Dependency Walker”,它似乎仅依赖于 64 位 dll 文件。 此外,我转到项目 B(属性页 -> 配置属性 -> 链接器 -> 高级)并确认“目标计算机”设置为“MachineX64”。 此外,在配置管理器上,平台设置为 x64。

有人告诉我问题可能是这样的:

转到项目 B(属性页 -> 配置属性 -> C\C++ -> 预处理器 -> 预处理器定义)我那里有以下值:

WIN32  
_DEBUG  
_WINDOWS  
_AFXEXT  

这真的相关吗?我应该替换“WIN32”值吗?如果是这样,那又如何?我不太明白这些定义的含义以及如何更改它们。

编辑:我刚刚意识到可能根本不相关。这些只是预处理器的定义,例如可以通过 C++ #define 命令确定的定义。但我可能是错的。

I use Visual Studio 2010 Premium. I have two project A and B and I try to compile both to a 64-bit platform.
Project A outputs a .dll and a .lib file which project B relies on.
I already compiled successfully project A to a 64-bit platform, yet when I compile project B I get the following error :

mfcs100d.lib(nolib.obj) : fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'

What could be the problem ? I don't really know what is this mfcs100d.lib file.
I've used "Dependency Walker" on project A's dll file and it seems to be relying solely on 64-bit dll files.
Additionally, I went to the Project B's (Property Pages -> Configuration Properties -> Linker -> Advanced) and confirmed that 'Target Machine' is set to "MachineX64".
Also, On the Configuration Manager the Platform is set to x64.

Someone infromed me that the problem may be such :

Going to project B's (Property Pages -> Configuration Properties -> C\C++ -> Preprocessor -> Preprocessor Definitions) I have the following values there :

WIN32  
_DEBUG  
_WINDOWS  
_AFXEXT  

Is that truly related ? Should I replace the 'WIN32' value ? if so, then how ? I don't really understand the meaning of those definitions and how to change them.

Edit : I just realized that probably it's not related at all. Those are simply definitions for the preprocessor, such as the ones which can be determined by a C++ #define command. Yet I could be wrong.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

绻影浮沉 2025-01-02 02:38:39

很难弄错这一点。从 Build + Configuration Manager 开始,并仔细检查是否为两个项目选择了 x64。下一步是验证库搜索路径。右键单击项目、属性、VC++ 目录、库目录。单击组合框箭头查看“继承值”。 $(VCInstallDir)atlmfc\lib\amd64 应该是列表中的第二个,这是 64 位版本的 mfcs100d.lib 所在的位置。

Pretty hard to get this wrong. Start with Build + Configuration Manager and double-check that x64 is selected for both projects. Next step is to verify the library search path. Right-click the project, Properties, VC++ Directories, Library Directories. Click on the combobox arrow to view the "Inherited values". $(VCInstallDir)atlmfc\lib\amd64 should be the second in the list, that's where the 64-bit version of mfcs100d.lib is located.

全部不再 2025-01-02 02:38:39

添加 x64 目标时,进入常规设置并查看输出目录和中间目录。对于调试目标从“调试”更改为“调试64”,发布目标相同。

When you add the x64 target, go into the General settings and look at Output Directory and Intermediate Directory. For the Debug target change from "Debug" to "Debug64", same for Release target.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文