1

malloc在 C 中,无论目标平台或编译器如何,我如何检测是否某种形式的可用?检测就够了_STDLIB_H_吗?

我想包含一个标头实用程序函数,该函数malloc仅在库用户已经提供时才使用。

更新:该库需要一些堆或堆栈内存分配,其数量在编译时可能知道也可能不知道。该库可以在运行时计算所需的确切内存量。因此,对于那些需要等到运行时并且可以/想要使用堆内存的人,我想让自动分配可用。但我不希望库本身加载“stdlib.h”。

4

1 回答 1

1

听起来您想要做的是生成一个可以在独立(嵌入式)和托管(非嵌入式)环境中使用的单一库二进制文件。这很棘手,但可能。

如果您正在构建一个静态库(它可能无论如何都需要 - 通常共享库在嵌入式环境中没有用),您可以只在您的库的一部分中使用 malloc ,只要不使用该部分通过应用程序,它不会被包括在内,一切都会好起来的。如果嵌入式应用程序使用需要 malloc 的东西,那么如果嵌入式环境不提供它,它们就会收到链接时错误。

所以你最终需要做的是为你的库提供两个入口点——一个需要malloc,一个不需要——并且用户(应用程序编写者)需要调用适合他们环境的一个。您需要确保这两个入口点包含在库中,以便只需要链接一个(通常,只需确保它们位于不同的编译单元中)。

但我不希望库本身加载“stdlib.h”

该声明表明对正在发生的事情存在根本性的误解。stdlib.h 是一个头文件,而不是一个库,所以你不要(也不能)“加载”它。您可以将它包含在您的源代码中,但这只是为您提供库中内容的声明;它不包括您图书馆中的任何图书馆。如果您不使用标题中的任何内容,则它将无效。如果您确实使用了标头中的内容,那将在您的库中创建对标准库的依赖项,这些依赖项需要在(应用程序)链接时解决。

于 2022-01-18T21:42:36.093 回答