link.exe returns 错误 LNK1181: 无法打开输入文件 'C:\Program.obj'

link.exe returns error LNK1181: cannot open input file 'C:\Program.obj'

我正在使用包含

的批处理文件进行编译
@echo off

set link=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\link

"%link%" external_input.obj periodic_dinger.obj flagger.obj monitor.obj main.obj libGui.lib libCore.lib libCint.lib libRIO.lib libNet.lib libHist.lib libGraf.lib libGraf3D.lib libGpad.lib libTree.lib libRint.lib libPostscript.lib libMatrix.lib libPhysics.lib libMathCore.lib libThread.lib

所有对象和库都在同一个目录中,这是我执行批处理文件的目录,也是批处理文件所在的目录。我试过将当前目录添加到 /LIBPATH:,但没有成功。我的 LIB 环境变量是

C:\Users\jroth\Data\online_monitor_v.0.5>echo %LIB%
"C:\Program Files\ (x86)\Microsoft Visual Studio 11.0\VC\LIB";"C:\Program Files
(x86)\Microsoft Visual Studio 11.0\VC\ATLMFC\LIB";"C:\Program Files (x86)\Window
s Kits.0\lib\win8\um\x86";

我确保所有内容都被引用了。当一切都没有被引用时,同样的错误出现了。逐字错误是

C:\Users\jroth\Data\online_monitor_v.0.5>make
Microsoft (R) Incremental Linker Version 11.00.50727.1
Copyright (C) Microsoft Corporation.  All rights reserved.

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\link
LINK : fatal error LNK1181: cannot open input file 'C:\Program.obj'

make.bat 是我用来 link 这个的批处理文件的名称,而不是 makefile。

我是 运行 vcvarsall.bat,然后再做这些。

问题出在您使用的环境变量 link 上。 MS 链接器也使用此变量作为标志。

来自https://msdn.microsoft.com/en-us/library/6y6t9esh.aspx

The LINK tool uses the following environment variables:

  • LINK, if defined. The LINK tool processes options and arguments defined in the LINK environment variable before processing the command line.

因此您不能使用 set link=...,您必须使用其他名称。 _link 会很好。