如何使用导出相同函数名的2个库

DaC*_*own 4 c c++ ambiguity word-wrap

重复以下问题:C函数冲突


嗨,在我目前的项目中,我必须使用某种接口库.函数名由这个接口给出,这个函数做的是开发人员的选择.据我所知,项目应该使用这个函数,当涉及到编译时,你可以选择lib并使用它来实现功能.我尝试做的是通过包装另一个并在mein函数中调用它来同时使用现有的lib和我的lib:

otherlib:

int function1 (int a) {
// do something
}
Run Code Online (Sandbox Code Playgroud)

MYLIB:

int function1 (int a) {
//my code here
    otherlib::function1(a);
}
Run Code Online (Sandbox Code Playgroud)

问题是我没有访问其他lib,而其他lib没有任何名称空间.我已经试过了

namespace old {
    #include "otherlib.h"
}
Run Code Online (Sandbox Code Playgroud)

然后在我的函数中通过old :: function1调用旧函数.只要它是唯一的头文件,这就可以工作.lib将它的符号输出回全球空间.还有类似的东西

namespace new {
    function1 (int a) {
        ::function1(a);
    }
}
Run Code Online (Sandbox Code Playgroud)

没用.最后但并非最不重要的是我尝试了ifdef和这里建议的定义

但我没有成功.

任何想法如何解决这个问题?提前致谢.

编辑:我既没有访问旧的lib也没有项目的两个库都应该使用.

EDIT2:至少旧的lib是静态的

Art*_*yom 6

C中的命名空间使用库名称前缀解决,例如:

libfoo - > foo_function1
libbar - > bar_function1

这些前缀是实际的名称空间.所以,如果你写libbar

int bar_function1(int a) {
     function1(a);
}
Run Code Online (Sandbox Code Playgroud)

这是解决问题的方法.

C有名称空间---它们只是称为前缀;)

另一个选择是通过动态加载库来做各种脏技巧,例如:

h1=dlopen("libfoo.so")
foo_function1=dlsym(h1,"function1")

h2=dlopen("libbar.so")
bar_function1=dlsym(h2,"function1")
Run Code Online (Sandbox Code Playgroud)