使用静态链接库中的枚举

时间:2013-11-22 17:14:37

标签: c gcc enums

我已经看到枚举不会从gcc中的库中导出。也就是说,如果我在lib1.c中使用enum foo并使用它来构建lib.a,我就不能在myprog.c中使用enum foo,它链接到库。

因此,这是否意味着如果我想使用enum foo,我必须在myprog.c中重新定义它?另外,有没有办法导出库的枚举,以便我的程序可以使用它们?

2 个答案:

答案 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中的功能的源代码包含相同的头文件lib1.h,其中声明了枚举,函数和其他内容,并链接到lib1.a