有关背景信息,请参阅this question。
基本上,我有一个类
的以下定义class MyClass {
virtual int foo4(double, int);
};
有没有办法指示编译器生成两个可以解析为foo4
的符号?也就是说,如果可执行文件要求动态链接器解析_ZN7MyClass4foo4Edi
(MyClass::foo4(double, int)
的符号)和其他符号(假设为_ZN7MyClass9reserved1Ev
),我想要MyClass::reserved1()
的符号}),动态链接器将解析为&MyClass::foo4(double, int)
。我在Linux上使用相当现代的GCC。
答案 0 :(得分:3)
在gcc中,使用"alias" attribute。
int reserved1() __attribute__((alias ("_ZN7MyClass4foo4Edi")));
...但我相信这只会在与(a)符号定义相同的目标文件中起作用,因此我不确定它是否适合您的使用案例:请参阅here。具体来说,它只是一个版本的虚拟调用的别名,并且不会被子类继承;另外,你不能用它来代替弱符号。
答案 1 :(得分:1)
在C ++中它看起来像这样:
class MyClass {
int foo5(double, int) __attribute__((alias("_ZN7MyClass4foo4Edi")));
virtual int foo4(double, int);
};
int MyClass::foo4(double d, int i)
{
}