【问题标题】:C - is it possible to switch between two different libraries with the same main?C - 是否可以在具有相同主目录的两个不同库之间切换?
【发布时间】:2015-04-02 01:44:10
【问题描述】:

对于我的新手问题,我很抱歉。 我有两个库用不同的结构计算相同的东西(一个使用队列,另一个使用队列,如两个堆栈)。 队列和堆栈都是用数组实现的(这不是我自己的决定,所以我不能使用不同的结构)。 两个库的 main 相同,没有任何区别,因此如果我使用第一个或第二个库,则 main 的行为方式相同。 出于这个原因,两个库具有相同的名称,但它们位于不同的文件夹中,因此我必须将 main.c 放在第一个或第二个文件夹中才能使用第一个或第二个库。 但这是一种非常肮脏的做法。 如何优化库的导入(可能在运行时)? 感谢您的回答。

我希望我很清楚。 对不起,我的英语不好。

【问题讨论】:

  • 您使用的是什么操作系统?另外,两个库中导出的函数签名是否相同?

标签: c header include libraries main


【解决方案1】:

我从您的描述中假设,两个库都公开了具有相同签名(函数名称、类型和参数)的函数。

大多数操作系统都提供了一种在运行时选择和加载动态库的机制。例如,在 Linux 中,您将使用 dlopendlsym (man page 将选定的库加载到进程的地址空间并获取给定函数名称的函数指针。使用它,您可以创建一个可执行文件,允许用户在运行时选择库。

【讨论】:

    【解决方案2】:

    我认为您想使用两个文件中的两个函数。也许您需要用 *.h 和 *.c 分隔代码。

    例如:

    交流

    #include <stdio.h>
    
    void A() {
      printf("this is A!");
    }
    

    啊。

    void A();
    

    b.c

    #include <stdio.h>
    
    void B() {
      printf("this is B!");
    }
    

    b.h

    void B();
    

    main.c

    #include "a.h"
    #include "b.h"
    
    int main(void) {
      A();
      B();
      return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-27
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 2016-06-03
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 2015-08-19
      相关资源
      最近更新 更多