- 论坛徽章:
- 0
|
各位老师,大家好!
我想请教一个关于在gcc环境中编译从抽象基类派生的类库的问题,在下面的代码中,如果抽象基类中没有任何成员的话,那么客户程序可以成功地打开和关闭库,可一旦在抽象基类中加入纯虚函数,那么客户虽然能够打开库,但在关闭库时被终止了,并提示标识符__deregister_frame_info未找到。麻烦大家给指点一下。
库文件
// faststring.h
class IFastString
{
public:
virtual int Length(void) const = 0;
virtual int Find(const char *psz) const = 0;
};
class FastString:public IFastString{
public:
int Length(void) const;
int Find(const char *psz) const;
};
//faststring.C
#include "faststring.h"
#include <string.h>;
int FastString::Length(void) const
{
return 1;
}
int FastString::Find(const char* psz) const
{
return 2;
}
客户代码
//cli.C
#include <stdio.h>;
#include <dlfcn.h>;
#include "faststring.h"
int main()
{
void* libhandle;
if((lib_handle = dlopen("/usr/steven/libfaststring.so", RTLD_LAZY))==NULL) {
printf(stderr,"Error in opening DLL .\n" ;
fprintf(stderr, "%s\n",dlerror());
return 0;
}
else
{
printf("open ok\n" ;
dlclose(libhandle);
}
}
库编译命令行
g++ -fPIC -c faststring.C
g++ -fPIC -shared -o libfaststring.so faststring.o
客户编译命令行
g++ cli.C
运行结果
open ok
dynmic_linker: symbol not found __deregister_frame_info
killed!
请多指教,谢谢! |
|