北京麒麟网站建设,广州网站设计公司招聘,国内网站没备案,网站开发代码归属Linux C语言调用C动态链接库 标签#xff1a; C调用C库 2014-03-10 22:56 3744人阅读 评论(0) 收藏 举报 分类#xff1a; 【Linux应用开发】#xff08;48#xff09; 版权声明#xff1a;本文为博主原创文章#xff0c;未经博主允许不得转载。 如果你有一个c做的动态… Linux C语言调用C动态链接库 标签 C调用C库 2014-03-10 22:56 3744人阅读 评论(0) 收藏 举报 分类 【Linux应用开发】48 版权声明本文为博主原创文章未经博主允许不得转载。 如果你有一个c做的动态链接库.so文件,而你只有一些相关类的声明,那么你如何用c调用呢,
C创始人在编写C的时候C语言正盛行他不得不让C兼容C。C最大的特性就是封装继承多态重载。而这些特性恰恰是C语言所不具备的。至于多态核心技术是通过虚函数表实现的其实也就是指针。而对于重载与C语言相比其实就是编译方式不同而已 C编译方式和C编译方式。对于函数调用编译器只要知道函数的参数类型和返回值以及函数名就可以进行编译连接。那么为了让C调用C接口或者是说C调用C接口就必须是调用者和被调用者有着同样的编译方式。这既是extern C的作用extern “C”是的程序按照C的方式编译。
下面具体看下面的代码
1、myclass.h [cpp] view plaincopyprint? #include iostream using namespace std; class Myclass { public: Myclass(){} ~Myclass(){} void Operation(); }; 2、myclass.cpp [cpp] view plaincopyprint? #include myclass.h using namespace std; void Myclass::Operation() { cout Hi my name is sjin endl; } 3 interface.h [cpp] view plaincopyprint? #ifdef __cplusplus extern C{ #endif void interface(); #ifdef __cplusplus } #endif 4 interface.cpp [cpp] view plaincopyprint? #include myclass.h #include interface.h #ifdef __cplusplus extern C{ #endif void interface() { Myclass obj; obj.Operation(); } #ifdef __cplusplus } #endif 5 main.c [cpp] view plaincopyprint? #include interface.h int main() { interface(); return 0; } 具体编译流程
1】首先生成动态库 [cpp] view plaincopyprint? g myclass.cpp interface.cpp -fPIC -shared -o libtest.so 2】将动态库拷贝的/usr/lib目录下
3】编译main.c
gcc main.c -L. -ltest
4】运行./a.out 参考资料
http://blog.csdn.net/feiyinzilgd/article/details/6723882
http://www.bdqn.cn/news/201309/11368.shtml