当前位置: 技术问答>linux和unix
动态链接库和多态的问题, 急啊!!!
来源: 互联网 发布时间:2015-08-27
本文导语: 1.我在主程序里定义了父类,它有个虚函数,主程序: class father{ public: virtual void p(void ){} }; ...
1.我在主程序里定义了父类,它有个虚函数,主程序:
class father{
public:
virtual void p(void ){}
};
int main(){
...
dlopen ("x.so", RTLD_NOW|RTLD_GLOBAL);
test->p(); //执行时,Segmentation fault
}
2.自己定义的动态链接库里定义了子类,并定义了父类的虚函数,动态库其中代码:
extern father *test;
class child : public father{
public:
void p(void){
printf("testn");
}
};
extern "C" void _init(void){
test = new child();
}
编译没问题,运行时, 段错误test->p(); //执行时,Segmentation fault
运行时,调用的好像还是父类的虚函数,所以出错,为什么不找子类的虚函数实现呢??
恳请高手指点!!!
class father{
public:
virtual void p(void ){}
};
int main(){
...
dlopen ("x.so", RTLD_NOW|RTLD_GLOBAL);
test->p(); //执行时,Segmentation fault
}
2.自己定义的动态链接库里定义了子类,并定义了父类的虚函数,动态库其中代码:
extern father *test;
class child : public father{
public:
void p(void){
printf("testn");
}
};
extern "C" void _init(void){
test = new child();
}
编译没问题,运行时, 段错误test->p(); //执行时,Segmentation fault
运行时,调用的好像还是父类的虚函数,所以出错,为什么不找子类的虚函数实现呢??
恳请高手指点!!!
|
用gdb进去看过么?执行到_init吗?
怀疑test可能都没被new出来
怀疑test可能都没被new出来
|
main函数中怎么得到test指针的?得到的指针是否为空,这里仔细检查。