我一直在使用 g++ 遇到奇怪的链接行为,但是,我只是一名学生,我想知道这是否正常。
我正在尝试将汇编代码(机器:fedora 14 gnome 32bits x86 i686 intel i7)与 c++ 代码链接起来,并让汇编代码从 c++ 文件中实例化的函数中调用一个方法。似乎在类声明中实现一个方法将阻止它被放入链接器表中,除非它在原始源代码中至少使用过一次。
class A
{
public:
void showSUP() {
cout<<"sup";
}
};
实例化A
后,您将无法调用_ZN1A7showSUPEv
,因为它还没有放入链接表中:
call _ZN1A7showSUPEv
但是,如果您在声明 A
的同一 .cpp 中调用 A::showSUP(),则可以从单独的程序集文件调用它。
与(和 A
的实例化)
class A
{
void showSUP();
};
A::showSUP()
{
cout<<"sup";
}
调用 _ZN1A7showSUPEv
会起作用。
我的问题是,为什么第一个示例不起作用。
提前谢谢大家。
最佳答案
有一些属性,你可以用这种方式为一个函数指定
classe A
{
public:
void showSUP(){
cout<<"sup";
} __attribute__((used))
};
used Found in versions: 3.1-3.4 Description:
This attribute, attached to a function, means that code must be emitted for the function even if it appears that the function is not referenced. This is useful, for example, when the function
is referenced only in inline assembly.
关于c++ - 奇怪的链接行为,最新的 g++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5672104/