我正在尝试在不使用 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/