【发布时间】:2023-03-23 22:08:01
【问题描述】:
我发现枚举不会从 gcc 中的库中导出。也就是说,如果我在 lib1.c 中有 enum foo 并使用它来构建 lib.a,我不能在 myprog.c 中使用 enum foo,它链接到库。
这样,是否意味着如果我想使用 enum foo,我必须在 myprog.c 中重新定义它?另外,有什么方法可以导出库的枚举,以便我的程序可以使用它们?
【问题讨论】:
我发现枚举不会从 gcc 中的库中导出。也就是说,如果我在 lib1.c 中有 enum foo 并使用它来构建 lib.a,我不能在 myprog.c 中使用 enum foo,它链接到库。
这样,是否意味着如果我想使用 enum foo,我必须在 myprog.c 中重新定义它?另外,有什么方法可以导出库的枚举,以便我的程序可以使用它们?
【问题讨论】:
这是“正常行为”。枚举是编译时常量,而不是放在二进制文件中或导出的变量。
通常,在使用库时,您将包含一个头文件,其中包含您将使用的函数的定义和在此库中/与此库一起使用的枚举。
【讨论】:
这就是你要做的:
创建一个(或多个)头文件,其中包含您希望其他代码能够使用的 lib1.c 声明:
lib1.h:
#ifndef LIB1_H_
#define LIB1_H_
enum Foo {
Bar =1
};
void do_something(enum Foo a);
#endif
在lib1.c源代码中,包含这个头文件,使用你定义的枚举,实现do_something()函数。
构建 lib1.c 以生成您的库,lib1.a
任何想要使用您的lib1.a 的人都需要两件事:
需要使用 lib1.a 中的功能的源代码,包含相同的头文件 lib1.h ,其中声明了枚举、函数和其他内容,并链接到 lib1.a
【讨论】: