如何用c语言调用c++做成的动态链接库

摘要:
今天,当我在做一些事情时,我遇到了一个问题,那就是如何调用动态链接库so文件,该文件由C++在C中生成。如果你有一个动态链接库。所以文件是由c++生成的,并且只有一些相关类的声明,那么如何使用c来调用它呢?别担心。本文使用一个小示例来处理它。链接库头文件:head。hcassA{public:A();virtual~A();intgt();int pt();private:ints;}//为什么要问hoovertre

今天在做东西的时候遇到一个问题,就是如何在C语言中调用C++做的动态链接库so文件
如果你有一个c++做的动态链接库.so文件,而你只有一些相关类的声明, 那么你如何用c调用呢,别着急,本文通过一个小小的例子,让你能够很爽的搞定.   
链接库头文件:
head.h

class A  
{  
        public:  
        A();  
        virtual ~A();  
        int gt();  
        int pt();  
private:  
        int s;  
};  
// 何问起 hovertree.com

firstso.cpp

#include <iostream>   
#include "head.h"  
  
  
A::A(){}  
A::~A(){}  
int A::gt()  
{  
    s=10;  
}  
int A::pt()  
{  
        std::cout<<s<<std::endl;  
}  
// 何问起 hovertree.com

编译命令如下:
g++ -shared -o libmy.so firstso.cpp
这时候生成libmy.so文件,将其拷贝到系统库里面:/usr/lib/
进行二次封装:

secso.cpp

#include <iostream>  
#include "head.h"  
extern "C"  
{  
int f();  
int f()  
{  
A a;  
a.gt();  
a.pt();  
return 0;  
}  
}  
// 何问起 hovertree.com

编译命令:
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;  
}  
// 何问起 hovertree.com

编译命令如下:
gcc -rdynamic -s -o myapp test.c

运行Z$./myapp

10
$

http://www.cnblogs.com/roucheng/p/3456005.html

免责声明:文章转载自《如何用c语言调用c++做成的动态链接库》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇delphi计算两个时间差-转IOSUIView之动画效果的实现方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux3.0.4编译LDD中的scull全过程

按照惯例,我是应该先写一些本章的收获的,不过太晚了。 在看完第三章之后开始编译,错误一堆,几乎崩溃,幸亏经过不断的百度,总算解决了问题,我发现 我遇到问题比较多,算是集中七个龙珠了吧,感谢先行的大神们。 1. CFLAGS was changed in "examples/scull/Makefile". Fix it to use EXTRA_CFLAG...

C++ MySQL编程

MySQL编程需要包含<mysql.h>头文件。该文件一般在MySQL安装目录下的include文件夹下。 包含头文件还不够,还需要包含“libmysql.lib”库,一般在lib文件夹下。 MySQL编程与Socket编程非常相似,唯一不同的是MySQL使用的是MYSQL结构体,而Socket使用的是SOCKET。因此需要先构建一个MYSQL...

TIOBE 四月世界编程语言排行榜:C语言重回榜首

TIOBE 2012年4月世界编程语言排行榜已经发布。C语言超越了Java重回榜首;而Objective-C则一路飙升,超越了C#,占据了第4的位置;并且C++也重新回到第3的位置。而Python持续下滑,目前排名第8。 TIOBE2012年4月世界编程语言排行榜的前20名 从开发领域来讲,只要有合适的硬件驱动和API,C或者C++理论上是可以做任何开发的...

boost asio 学习(七) 网络基础 连接器和接收器(TCP示例)

http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=8 7. Networking basics: connectors and acceptors (TCP)我们来学习boost的TCP网络编程。之前的篇章已经介绍了网络系统...

[转]天龙八部服务器端Lua脚本系统

一、Lua脚本功能接口 1. LuaInterface.h/.cpp声明和实现LuaInterface。 LuaInterface成员如下: //脚本引擎 FoxLuaScriptmLua ; //注册器 LuaCFuncRegistermFuncRegister; //场景关联 Scene*mOwner; //已经读取的脚本表 IDTablem_Sc...

c语言处理通过ajax发起http的post请求CGI并向浏览器返会值

环境:centos 6.5 web容器:apache2.4,[<http://httpd.apache.org/docs/2.4/] 准备: cd /usr/local/httpd-2.4.20/modules/generators enter   cp mod_cgi.c /usr/local/apache/bin enter   ....