5

有关背景,请参阅此问题

基本上,我有一个类的以下定义

class  MyClass {
    virtual int foo4(double, int);
};

有没有办法指示编译器生成两个可以解析为的符号foo4?也就是说,我希望如果一个可执行文件要求动态链接器解析_ZN7MyClass4foo4Edi(符号代表MyClass::foo4(double, int))和其他一些符号(比方说_ZN7MyClass9reserved1Ev,一个符号代表MyClass::reserved1()),动态链接器将两者都解析为&MyClass::foo4(double, int). 我在 Linux 上使用相当现代的 GCC。

4

2 回答 2

3

在 gcc 中,使用“别名”属性

int reserved1() __attribute__((alias ("_ZN7MyClass4foo4Edi")));

...但我相信这只适用于与 (a) 符号定义相同的目标文件,所以我不确定它是否适合您的用例:请参见此处。具体来说,它只会是一个版本的虚拟调用的别名,不会被子类继承;此外,您不能使用它为弱符号起别名。

于 2012-02-20T19:09:15.213 回答
1

在 C++ 中,它看起来像这样:

class  MyClass {
    int foo5(double, int) __attribute__((alias("_ZN7MyClass4foo4Edi")));
    virtual int foo4(double, int);
};

int MyClass::foo4(double d, int i)
{
}
于 2012-02-20T19:23:49.057 回答