C - 是否可以在具有相同主库的两个不同库之间切换?

C - is it possible to switch between two different libraries with the same main?

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

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

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

例如:

a.c

#include <stdio.h>

void A() {
  printf("this is A!");
}

a.h

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;
}

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

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