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 中,您将使用 dlopen
和 dlsym
(man page 将 selected 库加载到进程的地址 space 和获取给定函数名称的函数指针。使用它,您可以创建一个可执行文件,允许用户在 运行 时 select 库。
很抱歉我的新手问题。 我有两个库用不同的结构计算相同的东西(一个使用队列,另一个使用队列,就像两个堆栈)。 队列和堆栈都是用数组实现的(这不是我自己的决定,所以我不能使用不同的结构)。 两个库的 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 中,您将使用 dlopen
和 dlsym
(man page 将 selected 库加载到进程的地址 space 和获取给定函数名称的函数指针。使用它,您可以创建一个可执行文件,允许用户在 运行 时 select 库。