【发布时间】:2021-01-17 18:02:30
【问题描述】:
在 Visual Studio 2017 中处理这个项目已有几周时间,突然之间,自从我上次构建以来,我开始遇到数百个 LNK2001 错误。假定的未解析符号似乎是标准 CRT 和 C++ 的东西,例如 memmove、_imp_CrtDbgReport、strlen 等。我在项目的配置中做了一些东西,所以我打赌我将鼠标悬停在一个选项上,不小心滚动了什么的,但我似乎看不到任何明显的问题。
项目仍在使用 MDd CRT 生成,我没有忽略默认库。然而,我已经开始使用新的 3rd 方库,但假设的 LNK2001 错误再次出现在 strlen 和 memcpy 之类的东西上。
需要明确的是,我面临的问题是,我一直在使用的标准 C 和 C++ 库函数(如 strlen、memmove 等)(未明确)突然显示为未解析的外部符号。
【问题讨论】:
-
@rsjaffe 嘿,谢谢你的链接。我读了一遍,虽然它确实有助于我理解错误,但我面临的具体问题是标准 C 和 C++ 函数是未解决的,所以我的任何类型的链接或声明/定义错误似乎不太可能。
-
这是高级 GUI 环境的常见问题,它隐藏了实际的具体细节和所有复杂性,隐藏在漂亮的菜单、按钮和对话框后面。只要它有效,就可以了。但是当它坏掉时,几乎不可能准确地弄清楚是什么坏了。学习在 Linux 上使用传统命令行工具、编写 Makefile、将编译器和链接命令放在一起等需要更长的时间……但是您确切地知道发生了什么,每一步,以及什么时候让您崩溃”会确切地知道发生了什么故障,以及需要做些什么来修复它。
-
事实上,确实如此。在我的任何基于 Linux 的构建中都不会发生这样的事情,比如这个具有 1729 个 C++ 源文件和头文件的特殊库。如果我开始在系统库中遇到类似奇怪的链接失败,我确切地知道在哪里寻找(Makefile),哪些命令在哪里执行,以及所有链接选项来自哪里(祝你好运,用 VS 解决这个问题),以及需要解决的问题。而且我的一些构建框架很奇怪(XSLT 样式表运行 XML 来自动生成罐装 C++ 样板,随后被编译)。
标签: c++ visual-studio linker lnk2001