gpt4 book ai didi

c++ - crt0 是否加载 msvcrt.dll?

转载 作者:可可西里 更新时间:2023-11-01 10:06:08 30 4
gpt4 key购买 nike

我正在尝试弄清楚标准 C 函数(如 printf())如何在 Windows 环境中加载到内存中。我知道 crt0.obj 准备堆栈,调用 int main(int argc, char **argv) 然后使用 main 返回的退出代码退出进程。

我还听说 C 标准函数位于一个名为 msvcrt.dll 的共享库中。我想知道 crt0 是否也加载 msvcrt.dll 或者是否有一个 msvcrt.lib 也由编译器自动链接。

谢谢你,对不起我的英语:)

最佳答案

总会有一个运行时环境,例如 msvcr80.dll(适用于 Windows 变体),在您安装环境时加载,不管它是什么,即 MSVCxx、Code::Blocks with MinGW 等。环境安装程序将包含标准 C 库(用于 C 环境)的 .dll 放入您的系统目录,并提供所有必要的静态库以在构建期间链接到,以及原型(prototype)的头文件和使用该环境所需的定义。你只需要设置你的路径,(查看.libs)并在你的源代码中#include正确的头文件。

请注意,对于 Linux 等操作系统,运行时环境内置于操作系统中,包括所有共享库(与 .dll 同义)静态库和标准 C 的 .h。

关于您关于 msvcrt.dll 的问题,请阅读上面@Eric 的评论。 Microsoft 当前的 RTE 使用 msvcrnnn.dll 形式的命名约定(例如 msvcr80.dll、msvcr100.dll 等,具体取决于寻址(32 位或 64 位)、操作系统版本等)

关于您的陈述:也由编译器自动链接。 这完全取决于环境。如果您使用的是 Microsoft 的开发环境,那么是的,它可能已经设置了默认值以允许您的链接开箱即用。如果使用 Microsoft 库,但来自非 Microsoft 环境,则需要设置路径和其他环境变量以获取 .lib 和 .h 位置。

(关于你的英语:比我共事的大多数工程师说的都好。)

关于c++ - crt0 是否加载 msvcrt.dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23093365/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com