c - C 中的命名空间库

标签 c

所以我正在尝试使用 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/

相关文章:

c - 打开文件的段错误多线程

c - pthread_join() 导致段错误

c - 自动换行程序 C

C:随机数生成 - 这有什么问题(如果有的话)

c - RAW Socket 发送不起作用

c++ - 在 C 中使用指针时出现段错误

c - 如何删除未使用的共享内存和信号量?

c - C 中多重映射的任何良好实现?

c++ - 如何在 C 中将字节数组转换为 double?

C: snprintf 不接受 GUI 显示。需要建议