免费注册 查看新帖 |

Chinaunix

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

如何用c调用用c++做的库 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-17 14:54 |只看该作者 |倒序浏览

链接库头文件:
//head.h
class A
{
        public:
        A();
        virtual ~A();
        int gt();
        int pt();
private:
        int s;
};
.cpp
//firstso.cpp
#include  
#include "head.h"
A::A(){}
A::~A(){}
int A::gt()
        {
s=10;
                }
int A::pt()
        {
        
                std::cout
#include "head.h"
extern "C"
{
int f();
int f()
{
A a;
a.gt();
a.pt();
return 0;
}
}
编译命令:
gcc -shared -o sec.so secso.cpp -L. -lmy
这时候生成第二个.so文件,此时库从一个类变成了一个c的接口.
拷贝到/usr/lib
下面开始调用:
//test.c
#include "stdio.h"
#include "dlfcn.h"
#define SOFILE "sec.so"
int (*f)();
int main()
{
void *dp;
dp=dlopen(SOFILE,RTLD_LAZY);
f=dlsym(dp,"f");
f();
return 0;
}
编译命令如下:
gcc -rdynamic -s -o myapp test.c
运行Z$./myapp
10
$
这篇blog写了怎样用C调用C++的库,我试验了一下,在linux上成功,有两个地方要改一下,最后的编译语句应该是:
gcc -rdynamic -s -o -ldl myapp test.c
还有就是test.c最后应该加上:
dlclose(dp);
否则会CoreDump。
实际上他是把类的方法变成了一个可以外部调用的C函数。用extern C
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/57427/showart_466408.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP