gpt4 book ai didi

C 选择特定的函数实现(存在于许多库中)

转载 作者:行者123 更新时间:2023-11-30 17:03:11 25 4
gpt4 key购买 nike

我的 C 程序(在 Linux 上)使用我创建的两个共享库。它们都使用在外部(这些库外部) header GPSInterface.h

中声明的函数 getSample()

当然,两个库以不同的方式实现此功能。

My question is: How can I choose which implementation to use ?

我尝试将它们单独包含在内,但没有帮助。如:

//#include "lib1.h" /*COMMENTED OUT BUT STILL RUNS*/
#include "lib2.h"
.
.
int status = getSample(); //lib1's implementation is ran no matter what!

我强制使用特定实现的唯一方法是更改​​ IDE 中项目选项中库的顺序,但是,我认为必须有一种更实用和正确的方法。

最佳答案

您可以使用dlopen动态打开库,然后使用dlsym请求getSample符号并直接调用适当的函数版本。这是充当插件并符合特定 API 的 .so 文件的常见模式(因此必须具有相同的函数名称)。

#include <dlfcn.h>

int getSamplesFrom(const char *lib) {
void *lib = dlopen(lib, RTLD_LAZY);
if(!lib) return -1;

int sample = 0;
int (*func)(void) = (int (*)(void)) dlsym(lib, "getSample");
if(func) {
sample = func();
}

dlclose(lib);
return sample;
}

当然,您可以声明函数指针具有正确的签名来满足您的需求。

关于C 选择特定的函数实现(存在于许多库中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36247445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com