免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1081 | 回复: 2
打印 上一主题 下一主题

关于编译从抽象基类派生的类库 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-28 20:19 |只看该作者 |倒序浏览
各位老师,大家好!
我想请教一个关于在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!

请多指教,谢谢!

论坛徽章:
0
2 [报告]
发表于 2005-04-29 10:27 |只看该作者

关于编译从抽象基类派生的类库

这个跟纯虚函数没有关系,不过你的main函数怎么能够编译通过的,光看看就有不少笔误。你的用法没有什么问题,不过你编译cli的时候,没有加-ldl是怎么编译过的。

论坛徽章:
0
3 [报告]
发表于 2005-04-29 11:25 |只看该作者

关于编译从抽象基类派生的类库

我也不知道,我不加-ldl选项也编译通过了,而且加上这个选项的运行结果是一样的。
上次的客户代码是临时键入的,所以出了错误,现在我从源代码粘贴过来。

#include <stdio.h>;
#include <dlfcn.h>;


#define LIBPATH "/usr/steven/faststring/libfaststring.so"

int main()
{
        void *libhandle;

        libhandle = dlopen(LIBPATH, RTLD_LAZY);

        if(libhandle == NULL)
        {
                printf("Open failed. %s\n", dlerror() );
                return 1;
        }
        else
        {
                printf("Open ok!\n";
                dlclose(libhandle);
        }

return 0;
}

编译命令:
g++ -fPIC -c faststring.C
g++ -fPIC -shared -o libfaststring.so faststring.o
g++ cli.C -ldl

运行结果:
Open ok!
dynamic linker: ./a.out: symbol not found: __deregister_frame_info
Killed

请老师帮我诊断一下,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP