2010-10-22 269 views
11

我在Windows 7上有VS 2010.我创建了一个新项目,选择了C++语言,Win32项目,DLL,导出符号,然后完。现在,当我编译该项目没有任何改变什么VS会产生,我得到...Visual Studio 2010 - LINK:致命错误LNK1181:无法打开输入文件“■/ .obj”

LINK:致命错误LNK1181:2008年能不能打开输入文件“■/ .OBJ”

我也有VS安装上同一台机器。我遵循相同的步骤并编译。我究竟做错了什么?

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

+0

■是U + 25A0黑方块。 – 2010-10-22 20:41:25

+0

这是一个奇怪的文件名! – Donotalo 2010-10-22 20:42:33

+0

@Andreas - 我不知道,我只是复制和粘贴。 @Donotalo,同意了,我没有创建它。看看我的编辑,因为我正在研究这个。 – Les 2010-10-23 02:48:33

回答

7

那么发布这个问题已经有一段时间了。我在前一段时间想出了一个解决方法,现在我将自己回答。但是,如果您有任何更好的想法或其他人可以从中受益的其他信息,请发布。

我发现创建我的C++项目后,我需要删除“Microsoft.Cpp.Win32.User”属性表。如果我不这样做,那么我会得到上面的奇怪错误,但如果我删除它们,那么简单的项目编译就可以了。要删除它们......

  1. 选择查看 - >其他Windows的>属性格式经理
  2. 展开属性组(项目名称)
  3. 展开全部配置(我是“调试|的Win32”和 “释放|的Win32”)
  4. 多选 “Microsoft.Cpp.Win32.User” 属性页(每个配置下)
  5. 删除
+1

Jeez,微软似乎喜欢让事情尽可能复杂 – Nodeocrat 2016-02-19 15:53:13

2

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

我已经追踪了这一点。 对我来说,当我尝试构建我的应用程序的x64位版本时,不会发生这种情况。我发现,我的项目.vcxproj有一个“ImportGroup条件”,看起来像这样:

<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> 

我也有一个对我的64位编译,看起来像这样:

<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>路径导致此问题消失。我正在更深入地探索这条路,看看是否有任何东西出现在我身上,但我想我会把它传递出去,以防其他人发现这条路上出了什么问题。

+0

看起来它与包含在路径中的$(ExecutablePath)宏有关。我认为。删除它但是会导致找不到cl.exe。因此,也许搞清楚它能够解决什么问题,并且硬编码代替宏的路径可能会解决这个问题。 ??? – Mark 2014-01-27 15:17:58

0

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

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

截至上分析问题,发现项目“配置属性 - VC++目录 - 可执行文件目录”如下图所示,以包含有其自身的link.exe的Microsoft Visual Basic文件夹C:\Program Files (x86)\Microsoft Visual Studio\VB98的路径。

Visual Studio Executable Directories dialog

发生由于链接器错误Visual Studio中被调用的Visual Basic链接,而不是VISUAL C++连接器!

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

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

相关问题