我找到了一些讨论,答案是使用静态,另一个答案是重命名函数
但是,如果我没有源代码,我该如何重命名该功能?
我也尝试了静态但不起作用的错误:"警告#2135:静态' func'未被引用。"
什么是正确的解决方案?
的main.c
#include <stdio.h>
#include "liba.h"
#include "libb.h"
int main(int argc, char *argv[])
{
printf("Main\n");
func();
return 0;
}
liba.h
static void func(void);
liba.c
#include <stdio.h>
#include "liba.h"
static void func(void)
{
printf("lib a\n");
}
libb.h
static void func(void);
libb.c
#include <stdio.h>
#include "libb.h"
static void func(void)
{
printf("lib b\n");
}
答案 0 :(得分:1)
在C头文件中,函数是全局的,如果是同名的则会导致冲突。您需要更改名称以避免冲突。
答案 1 :(得分:1)
可以这样做,但不能直接。您需要抽象出包装器后面的有问题的重复函数。如答案所述[{3}}(由Jayesh联系):
如果您不控制其中任何一个,您可以将其中一个包起来。那 是编译另一个(静态链接!)库什么都不做 除了违规之外,重新导出原件的所有符号 一个,通过一个带有替代名称的包装器到达。
答案 2 :(得分:0)
据我所知,你不能这样做。我不是说这是不可能的,而是不切实际的,因为&#39; c&#39;不允许polymorphism
和namespaces
。是的,Jayesh分享的链接是有用的,看看What should I do if two libraries provide a function with the same name generating a conflict?