为什么链接器在 x86 目录而不是 x64 目录中查找 LIBCMT.lib?

问题描述 投票:0回答:1

设置

Windows 10

目标

我找到了一个库 libnodave 通过 S7 协议进行通信
我正在尝试通过编辑的 makefile 在 x64 架构上构建示例

问题

即使我设置了寻找 x64 库的目录 (

VAR =64
),链接器也会在 x86 文件夹中寻找 LIBCMT.lib。为什么? 如果我改变
VAR =86
一切都很好。

链接日志的关键部分:

C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\lib\x86\LIBCMT.lib : warning LNK4272: library machine type 'x86' conflicts with target machine type 'x64'

生成文件:

#
# Makefile to build a Windows Version of LIBNODAVE using MSVC++ from Microsoft.
#
# The directory where the tools are:
VCPATH=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705
SDKPATH=C:\Program Files (x86)\Windows Kits\10

VER=64

CC="$(VCPATH)\bin\Hostx$(VER)\x$(VER)\cl"
LL="$(VCPATH)\bin\Hostx$(VER)\x$(VER)\link"

CFLAGS= -I"$(VCPATH)\include" -I"$(SDKPATH)\Include\10.0.20348.0\um" -I"$(SDKPATH)\Include\10.0.20348.0\shared" -I"$(SDKPATH)\Include\10.0.20348.0\ucrt" -c -DBCCWIN -DDAVE_LITTLE_ENDIAN -TC
LLFLAGS= /LIBPATH:"$(VCPATH)\lib\x$(VER)" /LIBPATH:"$(SDKPATH)\Lib\10.0.20348.0\ucrt\x$(VER)" /LIBPATH:"$(SDKPATH)\Lib\10.0.20348.0\um\x$(VER)" /DEF:libnodave.DEF 


PROGRAMS=testISO_TCP.exe testISO_TCPload.exe 

LIBRARIES=libnodave.dll

all: $(LIBRARIES) $(PROGRAMS)



libnodave.dll: nodave.obj setportw.obj openSocketw.obj openS7online.obj 
    $(LL) $(LLFLAGS) /DLL nodave.obj setportw.obj openSocketw.obj openS7online.obj "$(SDKPATH)\Lib\10.0.20348.0\um\x$(VER)\WS2_32.Lib" /OUT:libnodave.dll    
testISO_TCP.exe: nodave.obj openSocketw.obj testISO_TCP.obj
    $(LL) $(LFLAGS) testISO_TCP.obj openSocketw.obj nodave.obj "$(SDKPATH)\Lib\10.0.20348.0\um\x$(VER)\WS2_32.Lib" /OUT:$@
testISO_TCPload.exe: nodave.obj  openSocketw.obj testISO_TCPload.obj 
    $(LL) $(LFLAGS) testISO_TCPload.obj openSocketw.obj nodave.obj "$(SDKPATH)\Lib\10.0.20348.0\um\x$(VER)\WS2_32.Lib" /out:testISO_TCPload.exe

#
# delete all but the sources:
#
clean:  
    del /f /q *.tds *.il? *.obj *.map *.lib *.dll *.exe *.exp
distclean:  
    del /f /q *.tds *.il? *.obj *.map

nodave.obj: nodave.c nodave.h
    $(CC) $(CFLAGS) -DDOEXPORT nodave.c
setportw.obj: setportw.c
    $(CC) $(CFLAGS) -DDOEXPORT setportw.c
openSocketw.obj: openSocketw.c
    $(CC) $(CFLAGS) -DDOEXPORT openSocketw.c
openS7online.obj: openS7online.c openS7online.h 
    $(CC) $(CFLAGS) -DDOEXPORT openS7online.c
s7fake.obj: s7fake.c
    $(CC) $(CFLAGS) -DDOEXPORT s7fake.c
c makefile linker plc siemens
1个回答
0
投票

问题是我正在构建它 Visual Studio 2022 开发人员命令提示符版本 x86 引用了错误的 nmake。
我必须使用 x64 来处理它,在我的例子中,它位于此处:“C:\ Program Files \ Microsoft Visual Studio�2 \ Community \ VC \ Auxiliary \ Build cvars64.bat”

© www.soinside.com 2019 - 2024. All rights reserved.