我想从可执行文件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语言编写。
谢谢。
答案 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
所以我可能发现了:-)
谢谢。