gpt4 book ai didi

c - C 中的命名空间库

转载 作者:太空狗 更新时间:2023-10-29 15:39:43 25 4
gpt4 key购买 nike

所以我正在尝试使用 C 而不是 C++,但我遇到了一个问题,大多数库的名称都非常琐碎,无论它是函数还是其他名称。例如 “Berkley Socket library” 有函数 write() 这是一个非常琐碎的名字,我认为不应该使用,有什么方法可以避免污染我的整个代码呢?我可以将包含的文件隔离在某种 namespace 中吗?

最佳答案

对于一般情况

不,除非你想做一些目标文件黑客攻击。

如果您使用该函数,您必须在源代码中为其名称定义一个宏(例如#define write namespace1_write),然后您必须使用objcopy 为对象中的所有符号添加前缀,如下所示:

objcopy --prefix-symbols=namespace1_ infile.o outfile.o

如果您随后链接到该对象,则可以使用该功能。 This answer非常深入地介绍了如何做到这一点。我建议阅读它。

针对您的情况

可能,如果您的应用程序中不需要 POSIX 函数。

如果您不使用函数write 并且您不包含声明它的头文件,您就不必弄乱目标文件。 ELF 格式(如今在 Unix 中普遍使用)指定主可执行文件中的符号覆盖加载的任何共享共享库中的符号。

但是,POSIX 不保证这一点。您必须在严格符合 ISO C 模式下进行编译才能应用。

关于c - C 中的命名空间库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58260508/

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