【问题标题】:Using enums from statically linked libraries使用静态链接库中的枚举
【发布时间】:2023-03-23 22:08:01
【问题描述】:

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

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

【问题讨论】:

    标签: c gcc enums


    【解决方案1】:

    这是“正常行为”。枚举是编译时常量,而不是放在二进制文件中或导出的变量。

    通常,在使用库时,您将包含一个头文件,其中包含您将使用的函数的定义在此库中/与此库一起使用的枚举。

    【讨论】:

      【解决方案2】:

      这就是你要做的:

      创建一个(或多个)头文件,其中包含您希望其他代码能够使用的 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

      【讨论】:

        猜你喜欢
        • 2014-06-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-26
        相关资源
        最近更新 更多