由于 lib 错误,Visual Studio 未编译
Posted
技术标签:
【中文标题】由于 lib 错误,Visual Studio 未编译【英文标题】:Visual Studio is not compiling due to lib error 【发布时间】:2020-01-17 09:37:36 【问题描述】:我安装了“Irrklang”声音库以将其包含在项目中,但每当我尝试编译时,我都会收到类似的错误
Severity Code Description Project File Line Suppression State
Error unexpected token '\b' C:\Users\HRJunior\Documents\IRRklang\lib\Winx64-visualStudio\irrKlang.lib 4
我在一个文件(irrklang.lib)中有大约 800 个,你知道吗?
VS 企业 2019 / W10 1903
【问题讨论】:
您似乎尝试将库文件构建为源文件。你不应该。相反,您应该与它链接。再解释一下:当你构建你的项目时,编译器会将源文件编译成目标文件。目标文件是具有生成机器代码的二进制文件。然后将这些目标文件传递给 链接器,该链接器将它们一起链接到可执行文件中。静态库(如您尝试使用的.lib
文件)基本上是目标文件的存档。 IE。该库已编译,只需链接即可。
你不想编译二进制文件
【参考方案1】:
您需要在 项目属性 中指定 .lib
文件,看起来您可能已尝试将其包含在 #include
中。
如果您查看下载,您应该会看到一些文件和目录,例如:
lib\Winx64-visualStudio\irrKlang.lib
bin\winx64-visualStudio\
包含一些示例和 3 个 DLL
include\
包含一堆 .h
文件。
examples\
包含一堆示例项目,包括 Visual Studio 解决方案。
所以我们这里有一个 DLL 库,带有一个导入库 (.lib
) 和一堆头文件。
示例项目很适合用来比较,看看你的项目哪里出了问题。
如果您右键单击您的项目 -> 属性 -> 链接器 -> 常规。在 "Additional Library Directories" -> Edit 下添加一行包含.kib
文件的目录,例如C:\Users\HRJunior\Documents\IRRklang\lib\Winx64-visualStudio\
(此时我会注意到,如果将项目交给其他人,该项目可能无法运行。您可以将 IRRklang 放在项目的子目录中,例如 C:\Users\HRJunior\Documents\CoolProject\thirdparty\IRRklang\lib\Winx64-visualStudio\
然后在 MSVC 中使用 $(SolutionDir)thirdparty\IRRklang\lib\Winx64-visualStudio\
,然后您可以给任何人C:\Users\HRJunior\Documents\CoolProject\
,它应该可以工作)。
然后在 Linker -> Input 下,对于 Additional Dependencies -> Edit 添加一行 irrKlang.lib
。或者在源代码中的某处添加行 #pragma comment(lib, "irrKlang.lib")
。
然后在 C/C++ -> General 下,对于 Additional Include Directories -> Edit 添加一行到包含标题的目录,C:\Users\HRJunior\Documents\IRRklang\include
。
此时您的项目应该构建,但尝试运行您会收到缺少 DLL 的错误,请将这 3 个 DLL 文件复制到包含您的 exe 的输出目录。您可以让 VS 自动执行此操作,方法是在 Build Events -> Post Build Event 的属性中使用复制命令,例如:xcopy "C:\Users\HRJunior\Documents\IRRklang\bin\winx64-visualStudio\*.dll" "$(OutDir)" /Y
【讨论】:
以上是关于由于 lib 错误,Visual Studio 未编译的主要内容,如果未能解决你的问题,请参考以下文章
错误无法在 Visual Studio 社区 2013 中打开文件“mfc80u.lib”
Visual Studio 错误:由于出现错误,无法启动 Visual Studio:System.NullReferenceException
为啥在 Visual Studio 中编译 C++ 项目时出现致命错误“LNK1104:无法打开文件 'cryptlib.lib'?