c++ - 禁用默认库和 CRT 时链接器错误

标签 c++ c

我正在尝试在不使用 CRT 的情况下构建 C++ 程序,但是我收到以下链接器错误,并且无法在线找到解决方案。我可以通过启用 CRT 默认库来修复它们,但这违背了我的目标。

error LNK2001: unresolved external symbol __imp____acrt_iob_func
error LNK2001: unresolved external symbol __imp____stdio_common_vfprintf

禁用默认库对我来说是全新的,我想知道这里是否有人以前遇到过这些错误并找到了解决方案?

最佳答案

您可能会发现Linkers and Loaders有趣的。要回答您的问题需要了解目标文件和可执行程序之间的区别。

从最简单的角度来看,C++ 并没有在语言中定义 I/O。。它将其留给库,通常是 Windows 中的默认 CRT。任何有用的程序都必须有一些输入并创建一些输出。如何在没有 I/O 的情况下做到这一点?

程序通常在操作系统的上下文中运行;这些被称为“托管”,因为操作系统提供服务并安排它们在计算机上运行。专门的嵌入式程序(例如,可能在微波炉上或汽车上)直接在计算机上运行,​​无需操作系统的帮助。此类嵌入式程序从硬件端口和中断获取输入和输出,并且对默认运行时库中的函数没有任何用处。

如果您有兴趣开发嵌入式系统或用其他东西替换 CRT,那么您可能需要禁用与 CRT 的链接。但在我看来,更好的平台是 NetBSD。

关于c++ - 禁用默认库和 CRT 时链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45376255/

相关文章:

c - 以二进制形式读取 mid 文件以进行进一步分析

c - 如何防止 gcc -O2 优化 putchar?

c - OpenSSL DigestInit_ex

c++ - 使用 MPFR 将 float 转换为字符串

c++部分模板特化,typename为void

c++ - 在 C++ 中将分数(1/8、3/8、5/8、7/8)转换为 UTF-8

c++ - 插入到 STL vector 中

ios - 如何测试位标记的所有字段是否存在于另一个位掩码中?

c - 这里是否需要将指针设置为 NULL 并清空 char 数组?

c++ - 如何正确地将指针对象重新用于自定义类