Visual Studio 2010 - LINK:致命错误LNK1181:无法打开输入文件“■/ .obj”

时间:2010-10-22 20:39:17

标签: c++ visual-studio-2010

我在Windows 7上安装了VS 2010.我创建了一个新项目,选择了c ++语言,Win32项目,DLL,导出符号,然后完成。现在,当我编译项目而没有对VS生成的任何更改时,我得到......

LINK:致命错误LNK1181:无法打开输入文件“■/ .obj”

我也在同一台机器上安装了VS 2008。我按照相同的步骤进行编译。我做错了什么?

修改 好的,我发现这个错误是由于使用了旧版本的链接器。我不知道为什么。在VS2010中,项目目录的设置与VS2008中的设置不同。一旦我明白了,也许我可以解决自己的问题。

4 个答案:

答案 0 :(得分:8)

自发布此问题以来已经有一段时间了。我找到了一个解决方法,所以现在我要自己回答。但如果您有任何更好的想法或其他人可以从中受益的其他信息,请发布。

我发现创建C ++项目后,我需要删除“Microsoft.Cpp.Win32.User”属性表。如果我没有,那么我得到上面的奇怪错误,但如果我删除它们,简单的项目编译好。删除它们......

  1. 选择查看 - >其他Windows-> Propery Manager
  2. 展开属性组(项目名称)
  3. 展开所有配置(我的是“Debug | Win32”和“Release | Win32”)
  4. 多选所有“Microsoft.Cpp.Win32.User”属性表(每个配置下一个)
  5. 删除

答案 1 :(得分:2)

Visual Studio 2012 - LINK:致命错误LNK1181:无法打开输入文件“■/ .obj” 我正在使用VS 2012 !!!!

我已经跟踪了这一点。 对我来说,当我尝试构建应用程序的x64位版本时,这不会发生。我发现我的项目.vcxproj有一个'ImportGroup Condition',如下所示:

  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>

我的x64版本中还有一个看起来像这样:

  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>

所以我看了看文件:

Users\??????????\AppData\Local\Microsoft\MSBuild\v4.0
Microsoft.Cpp.Win32.user.props
Microsoft.Cpp.x64.user.props

不同之处在于各自不同。 x64基本上是空的,而Win32中有三个路径。

Win32版本的部分包含三个路径,<ExecutablePath><IncludePath><LibraryPath>

我发现删除<ExecutablePath>路径会导致此问题消失。我正在深入研究这条道路,看看是否有什么东西突然出现在我身上,但我想我会把它传递下去,万一其他任何人都可以找到这条道路的错误。

答案 2 :(得分:0)

在Visual Studio 2017中编译VC ++项目时,我也遇到了同样的问题。编译器抱怨如下。

LINK : fatal error LNK1181: cannot open input file " ■/.obj"

在分析问题时,发现项目&#34;配置属性 - VC ++目录 - 可执行目录&#34;如下所示包含Microsoft Visual Basic文件夹C:\Program Files (x86)\Microsoft Visual Studio\VB98的路径,该文件夹具有自己的link.exe

Visual Studio Executable Directories dialog

由于Visual Studio正在调用Visual Basic链接器而不是Visual C ++链接器,因此发生了链接器错误!

发生这种情况是因为Visual Basic链接器的路径在上面的对话框中列出了 first ,因此Visual Studio首先遇到Visual Basic linker.exe,同时通过可执行目录的路径。

其中一个解决方案是通过将路径移动到VB98文件夹从第一个最后一个来更新可执行目录中包含路径的顺序。可以通过编辑Microsoft.Cpp.Win32.user.props目录中存在的$(USERPROFILE)\appdata\local\microsoft\msbuild\v4.0等必需的属性文件来实现。

答案 3 :(得分:0)

以我为例(VS 2017),我必须在链接程序->其他依赖项中删除以下条目:

\
$(INHERIT)\

可能是Qt预处理器添加的。