gpt4 book ai didi

c - 在库中隐藏非 API 符号

转载 作者:行者123 更新时间:2023-12-04 11:11:56 24 4
gpt4 key购买 nike

假设我有一个库 foo,它由模块 fooutil 组成,并且具有以下源代码树:

foo/
foo.c
foo.h
util.c
util.h

该库的公共(public) API 在 foo.h 中定义,所有全局标识符都以 foo_util_ 为前缀。 util 模块仅供 foo 使用。为了防止与名为 util 的其他模块发生名称冲突,我想创建一个(静态)库,其中只有来自模块 foo 的标识符是可见的。我该怎么做?

编辑:我在互联网上进行了相当广泛的搜索,但令人惊讶的是,这似乎是计算机科学中 Unresolved 问题之一。

最佳答案

可能还有其他可能的方法,但这里有一个:

您可能会考虑在 foo.c 中包含文件 util.c 并使所有 util 函数/全局变量成为静态的。即:

#include "util.c"
// ...

这与 *.h 文件的工作方式相同,它只是将整个源代码移植到 foo.c 中,嵌套 util.c 和使所有静态数据可用。

当我这样做时,我将文件重命名为 .inc(即 util.c => util.inc)...

#include "util.inc"
// ...

...这是我在某处找到的旧约定,尽管它可能与汇编程序文件冲突,因此您必须自行判断。

编辑

另一种方法可能需要特定于链接器的指令。例如,this SO answer details GNU's ld to achieve this goal .还有其他方法,列在同一个线程中。

关于c - 在库中隐藏非 API 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46058364/

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