Jul*_*.M. 1 c++ linker gcc g++
我一直在与g ++遇到奇怪的链接行为,但是,我只是一个学生,我想知道这是否正常.
我试图将汇编代码(机器:fedora 14 gnome 32bits x86 i686 intel i7)与c ++代码链接,并使汇编代码从c ++文件中实例化的函数调用方法.似乎在类声明中实现一个方法会阻止它被放入链接器表中,除非它在原始源中至少使用过一次.
class A
{
public:
void showSUP() {
cout<<"sup";
}
};
Run Code Online (Sandbox Code Playgroud)
实例化后A,您将无法调用,_ZN1A7showSUPEv因为它尚未放入链接表中:
call _ZN1A7showSUPEv
Run Code Online (Sandbox Code Playgroud)
但是,如果在A声明的.cpp中调用A :: showSUP(),则从单独的程序集文件中调用它将起作用.
随着(和实例化A)
class A
{
void showSUP();
};
A::showSUP()
{
cout<<"sup";
}
Run Code Online (Sandbox Code Playgroud)
通话_ZN1A7showSUPEv将有效.
我的问题是,为什么第一个例子不起作用.
谢谢大家.
有一些属性,您可以通过这种方式为函数指定
classe A
{
public:
void showSUP(){
cout<<"sup";
} __attribute__((used))
};
Run Code Online (Sandbox Code Playgroud)
请参阅gcc属性概述
used在以下版本中找到:3.1-3.4描述:
Run Code Online (Sandbox Code Playgroud)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仅在内联汇编中引用.