我已经看到枚举不会从gcc中的库中导出。也就是说,如果我在lib1.c中使用enum foo并使用它来构建lib.a,我就不能在myprog.c中使用enum foo,它链接到库。
因此,这是否意味着如果我想使用enum foo,我必须在myprog.c中重新定义它?另外,有没有办法导出库的枚举,以便我的程序可以使用它们?
答案 0 :(得分:1)
这是“正常行为”。枚举是编译时常量,而不是放在二进制或导出的变量。
通常,在使用库时,您将包含一个头文件,其中包含您将使用和在此库中使用的枚举的函数的定义。
答案 1 :(得分:1)
这就是你要做的:
创建一个(或多个)头文件,其中包含您希望其他代码能够使用的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