首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图在64位计算机上将Detours.lib编译为32位: LNK1112:模块机器类型'x86‘与目标计算机类型'x64’发生冲突

试图在64位计算机上将Detours.lib编译为32位: LNK1112:模块机器类型'x86‘与目标计算机类型'x64’发生冲突
EN

Stack Overflow用户
提问于 2020-05-05 00:46:44
回答 1查看 356关注 0票数 1

我在试着按照指令编译Detours。我想编译32位版本的库,因为我计划挂起一个32位的应用程序。我搜索了答案,但他们似乎解释了显而易见的问题,比如切换到64位,但我打算编译32位。

我使用了一个混合命令,试图让它正常工作:

代码语言:javascript
复制
SET DETOURS_TARGET_PROCESSOR=X86
CALL "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat"  x86
CALL "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"
NMAKE

但是,这会导致以下错误:

1)在VCVARSALL期间:

代码语言:javascript
复制
[ERROR:team_explorer.bat] Directory not found : "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer"
[vcvarsall.bat] Environment initialized for: 'x86'

2)在NMAKE期间

代码语言:javascript
复制
LIBCMT.lib(chkstk.obj) : fatal error LNK1112: module machine type 'x86' conflicts with target machine type 'x64'

正如你所看到的,尽管我尽了最大的努力,它还是在抱怨目标机器类型。

我也尝试过vcvarsall x64,与SET DETOURS_TARGET_PROCESSOR=X86一起使用。(不确定这是否有效的测试)这导致

代码语言:javascript
复制
iping_d.obj : error LNK2001: unresolved external symbol iping_ProxyFileInfo

请帮助我理解我做错了什么。

当我选择DETOURS_TARGET_PROCESSOR=X64时,它编译成功,但是它创建了一个64位库,我不能在32位dll中使用这个库。

我还在VC x86本机工具命令提示符中尝试了所有这些,结果都是一样的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-21 05:18:39

我已经写了一个关于绕行问题跟踪器的问题的答案,在这里:https://github.com/microsoft/Detours/issues/98

为了方便起见,在这里重新发布了内容:

我认为这里的问题是,您使用了错误的配置交叉编译。要在x86主机上交叉编译x64二进制文件,您需要:

DETOURS_TARGET_PROCESSOR=X86

  • 启动一个“VS的x64_x86交叉工具命令提示符”命令提示符。

我认为您可能意外地启动了“VS的x86_x64交叉工具命令提示符”命令提示符。如果我这样做,然后设置DETOURS_TARGET_PROCESSOR=X86,我可以复制相同的错误。我想,如果我为X64做相反的交叉编译,也会发生同样的事情。

命名非常混乱,但您可以通过检查命令提示符中设置的环境变量来轻松验证。

x64_x86交叉工具命令提示符:

代码语言:javascript
复制
C:\>set | findstr VSCMD_ARG
VSCMD_ARG_app_plat=Desktop
VSCMD_ARG_HOST_ARCH=x64
VSCMD_ARG_TGT_ARCH=x86

注意:VSCMD_ARGT_TGT_ARCH等于我们所针对的体系结构,并且应该等于DETOURS_TARGET_PROCESSOR

x86_x64交叉工具命令提示符:

代码语言:javascript
复制
C:\>set | findstr VSCMD_ARG
VSCMD_ARG_app_plat=Desktop
VSCMD_ARG_HOST_ARCH=x86
VSCMD_ARG_TGT_ARCH=x64

我们在这里可以看到,这些值与我们想要的完全相反。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61603994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档