使用包装器“隐藏” API

时间:2018-08-21 14:35:52

标签: c function api call

我想从可执行文件A中控制供应商特定的API。此API随计算机而异。但是,可执行文件A要使用稳定的API。因此,我需要一个包装器B。可执行文件A应该不知道库C中函数名称的更改:

A:可执行 B:包装器(可执行/共享对象?) C:机器特定的库(共享对象)

A  <stable api> B <machine specific API> C

我希望这是有道理的。

A从不直接从C调用函数。我想为包装器B使用动态库。编译A时,它开始抱怨C中的未知引用(机器特定的函数名称)。是否可能使A不在乎C中的函数名称?

我可以将B更改为可执行文件,并使用A和B之间的进程间通信(IPC),但是我不喜欢这种开销。

所有代码都用C语言编写。

谢谢。

1 个答案:

答案 0 :(得分:0)

main.c

int main()
{
    printf("The number: %d\n", get_number());
}

wrapper.c

int get_number()
{
        return unstable1();
}

不稳定。c

int unstable1()
{
        return 111;
}

将wrapper.c和stable.c编译为wrapper.so

使用wrapper.so编译main.c

./主要 人数:111

请勿再触摸./main。

$ rm wrapper.o wrapper.so

wrapper.c:

int get_number()
{
        return unstable2();
}

unstable.c:

int unstable2()
{
        return 222;
}

将wrapper.c和unstable.c重新编译为wrapper.so 再次运行main: 。/主要 数量:222

所以我可能发现了:-)

谢谢。