gpt4 book ai didi

c - 在使用 nostdlib 和 nostdinc 标志进行编译时如何使用 stdio 和 stdlib?

转载 作者:行者123 更新时间:2023-11-30 18:39:09 26 4
gpt4 key购买 nike

我编写了一个 Makefile,用另一个应用程序编译我的迷你操作系统。我必须使用 -nostdioc 和 -nostdlib 来编译它们,但问题是,该应用程序正在使用 stdio/stdlib 函数,当我运行 Makefile 时,出现错误无法找到我的应用程序使用的功能的消息。

我尝试删除 -nostdlib -nostdioc 但没有成功。

Here is the Makefile如果有人想看的话。

最佳答案

-nostdlib 告诉 gcc 不包含 告诉编译器不包含标准库,其中之一是 glibc(GNU libc)。 -nostdinc 告诉编译器不要使用头文件的标准路径。 stdlib.h 和 stdio.h 中带有原型(prototype)的函数是 libc 的一部分,您已告诉 gcc 不要使用它们。因此,您需要自己实现它们或显式包含 libc(用于自定义操作系统的一些常见库是 newlib 和 uClibc)。哪种方法更容易取决于所使用的功能。我应该补充一点,如果您正在尝试编译操作系统和应用程序,甚至是静态应用程序,您可能需要考虑使用交叉编译器( http://wiki.osdev.org/GCC_Cross-Compiler ),并且接下来是否可以使其正常工作步骤是您自己的工具链,其中包括 libc ( http://wiki.osdev.org/OS_Specific_Toolchain )。

如果无法实现必要的功能,那么最好的选择是使用完整的工具链,包括您自己的 libc。您不能简单地使用 GNU libc 作为 libc 的一部分,libc 是系统调用的包装器,并且您必须拥有一个具有与主机操作系统相同的系统调用接口(interface)的内核。请注意,将 libc 移植到操作系统的过程的一部分是实现系统调用。对于 newlib,这包括但不限于写入、读取、打开、关闭、fork 和 exec。如果您的应用程序不使用这些系统调用,您可以简单地实现虚拟版本。

关于c - 在使用 nostdlib 和 nostdinc 标志进行编译时如何使用 stdio 和 stdlib?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30790392/

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