如果在C中具有相同的功能,如何使用两个库?

时间:2014-03-18 04:38:35

标签: c function duplicates

我找到了一些讨论,答案是使用静态,另一个答案是重命名函数

但是,如果我没有源代码,我该如何重命名该功能?

我也尝试了静态但不起作用的错误:"警告#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");
}

3 个答案:

答案 0 :(得分:1)

在C头文件中,函数是全局的,如果是同名的则会导致冲突。您需要更改名称以避免冲突。

答案 1 :(得分:1)

可以这样做,但不能直接。您需要抽象出包装器后面的有问题的重复函数。如答案所述[{3}}(由Jayesh联系):

  

如果您不控制其中任何一个,您可以将其中一个包起来。那   是编译另一个(静态链接!)库什么都不做   除了违规之外,重新导出原件的所有符号   一个,通过一个带有替代名称的包装器到达。

答案 2 :(得分:0)

据我所知,你不能这样做。我不是说这是不可能的,而是不切实际的,因为&#39; c&#39;不允许polymorphismnamespaces。是的,Jayesh分享的链接是有用的,看看What should I do if two libraries provide a function with the same name generating a conflict?