我一直在Visual Studio 2010中遇到一个奇怪的错误。
我有一个解决方案,包括一个编译为静态库的项目,另一个项目非常简单,但依赖于这个库。
有时,在最后几天非常频繁,在重建解决方案或仅使用1-3个已更改的源文件进行编译之后,我收到以下错误:
2>LINK : fatal error LNK1181: cannot open input file 'thelibrary.lib'
========== Rebuild All: 1 succeeded, 1 failed, 0 skipped ==========
编译thelibrary.lib
成功的地方没有任何错误或警告。
我尝试过清理解决方案,但这并不总是有效。
答案 0 :(得分:39)
在Linker中,通用的附加库目录,将目录添加到链接器,输入中包含的.dll或.libs。 如果将它放在VC ++目录,库目录中,它就不起作用。
答案 1 :(得分:11)
转到:
Project properties -> Linker -> General -> Link Library Dependencies set No.
答案 2 :(得分:9)
我只能看到这里发生的一件事: 您没有在项目中对thelibrary.lib设置正确的依赖关系,这意味着.library.lib是以错误的顺序构建的(或者在同一时间,如果您有超过1个CPU构建配置,这也可以解释错误的随机性) 。 (您可以在以下菜单中更改项目依赖关系:菜单 - >项目 - >项目依赖关系)
答案 3 :(得分:7)
我最近遇到了同样的错误。一些挖掘提出了这个: http://support.microsoft.com/kb/815645
基本上,如果.lib的路径中有空格,那就太糟糕了。不知道这是不是发生了什么,但似乎有可能。
修复是1)将lib引用放在“引号”中,或者2)将lib的路径添加到库目录(配置属性>> VC ++目录)。
答案 4 :(得分:4)
我在VS 2010和VS 2012中都遇到了同样的问题。 在我的系统上,构建了第一个静态库,然后在主项目开始构建时立即删除。
问题是几个项目的常见中间文件夹。只需为每个项目分配单独的中间文件夹。
详细了解here
答案 5 :(得分:2)
我遇到了类似的问题,因为LINK1181
文件中的.OBJ
错误是项目本身的一部分(整个项目中只有2个.cxx文件)。
最初我设置了项目以在Visual Studio中生成.EXE
,然后在
Property Pages -> Configuration Properties -> General -> Project Defaults -> Configuration Type
,我将.EXE更改为.DLL。怀疑Visual Studio 2008不知何故变得困惑,我从头开始使用.DLL模式从头开始重新创建整个解决方案。之后问题就消失了。我想如果你通过.vcproj和其他相关文件手动选择你的方式,你可以弄清楚如何解决问题,而无需从头开始(但我的程序包含两个.cpp文件,因此更容易重新开始)。
答案 6 :(得分:2)
我解决了以下问题:
转到View->属性页 - >配置属性 - >链接器 - >输入
在其他依赖项下添加thelibrary.lib。不要使用任何引用。
答案 7 :(得分:1)
我遇到了同样的问题。对我来说,似乎是由于有两个同名的项目,一个取决于另一个。
例如,我有一个名为Foo的项目,它生成Foo.lib。然后我有另一个名为Foo的项目,它在Foo.lib中生成Foo.exe和链接。
我看过带有Process Monitor的文件活动。似乎正在发生的是首先构建Foo(lib) - 这是正确的,因为Foo(exe)被标记为依赖于Foo(lib)。这一切都很好并且构建成功,并且放在输出目录中 - $(OutDir)$(TargetName)$(TargetExt)。然后触发Foo(exe)重建。好吧,重建是一个干净,然后是一个构建。好像Foo.exe的“干净”阶段正在从输出目录中删除Foo.lib。这也解释了为什么后续的“构建”有效 - 不会删除输出文件。
VS中的一个错误我想。
不幸的是,由于涉及Rebuild,我没有问题的解决方案。解决方法是手动发出Clean,然后是Build。
答案 8 :(得分:1)
我不知道为什么,但将Linker-> Input->附加依赖项引用从“dxguid.lib”更改为“C:\ Program Files(x86)\ Microsoft DirectX SDK(2010年6月)\ Lib” \ x86 \ dxguid.lib“(在我的情况下)是唯一有用的东西。
答案 9 :(得分:1)
对我来说问题是错误的include
目录。我不知道为什么这会导致看似缺少lib的错误,因为include目录只包含头文件。并且库目录具有正确的路径集。
答案 10 :(得分:0)
不是 OP 问题的答案,因为我使用 CMake 和 Visual Studio 作为生成器,但我个人也遇到了同样的问题(我使用的是 Visual Studio 工具链,而不是 IDE 来构建东西)。
我的修复是在目标链接库之前目标链接库目录的目录(我有几个)。
O(1)
不确定幕后发生了什么,但也许 VS IDE 在某处有等效的设置?
答案 11 :(得分:0)
在我的情况下,我使用NuGet软件包(cpprestsdk)安装了该库,然后错误地将该库添加到了链接器设置中的“其他依赖关系”。事实证明,包装为您完成了所有工作。
链接器然后尝试在库路径中找到该库,当然找不到它。
从附加依赖项中删除库后,所有内容进行编译和链接都可以。
答案 12 :(得分:0)
我为此找到了另一种解决方案...
实际上,我错过了两个库路径之间的逗号分隔符。加入通用后,对我有用。
转到:Project properties -> Linker -> General -> Link Library Dependencies
在此路径下,请确保库的路径正确。
以前的代码(有错误-因为我忘记了用逗号分隔两个lib路径):
<Link><AdditionalLibraryDirectories>..\..\Build\lib\$(Configuration)**..\..\Build\Release;**%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
修复后的代码(仅需带逗号的独立库):
<Link><AdditionalLibraryDirectories>..\..\Build\lib\$(Configuration)**;..\..\Build\Release;**%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
希望这会对您有所帮助。
答案 13 :(得分:0)
在带有长参数列表的Windows上从cmd运行lib.exe时,我遇到了相同的错误。显然,cmd.exe的最大行长约为8K个字符,这导致此阈值末尾的文件名被更改,从而导致严重的文件名错误。 我的解决方案是修剪线。我从文件名中删除了所有路径,并使用/ LIBPATH选项添加了单个路径。例如:
/LIBPATH:absolute_path /OUT:outfilename filename1.obj filename2.obj ... filenameN.obj
答案 14 :(得分:0)
我遇到了同样的问题。通过定义包含所有链接器对象的宏OBJECTS
来解决它,例如:
OBJECTS = target.exe kernel32.lib mylib.lib (etc)
然后在链接器的命令行上指定$(OBJECTS)
。
我不使用 Visual Studio ,只是使用nmake和.MAK文件
答案 15 :(得分:0)
您还可以通过在DOS&#34; 8.3&#34;中指定库路径来修复路径空间问题。格式。
要获取8.3表单,请执行(在命令行中):
DIR /AD /X
以递归方式遍历每个级别的目录。
答案 16 :(得分:0)
也许你有硬件问题。
我在旧系统(AMD 1800 MHz CPU,1GB RAM,Windows 7旗舰版)上遇到了同样的问题,直到我将 2x 512 MB RAM 更改为 2x 1GB RAM 。从那以后没有任何问题。其他(小)问题也消失了。猜猜那两个512 MB模块之间并不那么相似,因为 2x 512 MB + 1GB 或 1x 512 MB + 2x 1GB 也无法正常工作。
答案 17 :(得分:-2)
我在project_dir级别创建了一个bin
目录,然后在release/debug
文件夹中创建了一个bin
目录,这解决了我的问题。