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是静态的
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)
归档时间: |
|
查看次数: |
7382 次 |
最近记录: |