C调用C++动态库,静态库

 

C调用C++动态库,静态库
//paullib.cpp
1 #include <iostream>
      2 using namespace std;
      3
      4 class paul
      5 {
      6         int a,b;
      7         public:
      8         int add(int a,int b);
      9 };
     10
     11 int paul::add(int a,int b)
     12 {
     13         int sum;
     14         sum=a+b;
     15         return sum;
     16 }
     17
     18 extern "C"          // 如果没有则不行;
     19 {
     20         int callfunc()
     21         {
     22                 paul m;
     23                 cout<<m.add(3,4)<<endl;
24          }
     25 }
//paul.c
1 #include <stdio.h>
      2 extern void callfunc();// 要被外部函数调用;
      3 int main()
      4 {
      5
      6         callfunc();
      7         return 0;
      8 }
 
静态库:
# G++ -c paullib.cpp
# ar –cr slib paullib.o
#gcc -o paul paul.c -L. slib -lstdc++  //注意这个程序还是要调用c++的库函数,加上-LSTDC++就可以了
注意:nm slib看一下:
 
动态库:
[root@localhost 08-14]# g++ paullib.cpp -fPIC -shared -o libpaul.so
[root@localhost 08-14]# cp libpaul.so /lib
[root@localhost 08-14]# gcc paul.c -L. -lpaul -o paul
注意:-lpaul不要写错了;
[root@localhost 08-14]# nm libpaul.so
00001cd4 A __bss_start
00000944 T callfunc  //注意CALLFUNC后面没有V,如果没有加EXTERN “C” 则有
00000864 t call_gmon_start
00001cd4 b completed.1
00001c80 d __CTOR_END__
00001c78 d __CTOR_LIST__
         U __cxa_atexit@@GLIBC_2.1.3
         w __cxa_finalize@@GLIBC_2.1.3
 
 
不加 extern “c”
00001b9c d p.0
000009ee t __tcf_0
0000099a t _Z41__static_initialization_and_destruction_0ii
00000948 T _Z8callfunc v
00000934 T _ZN4paul3addEii
         U _ZNSolsEi@@GLIBCPP_3.2
         U _ZNSolsEPFRSoS_E@@GLIBCPP_3.2
         U _ZNSt8ios_base4InitC1Ev@@GLIBCPP_3.2
         U _ZNSt8ios_base4InitD1Ev@@GLIBCPP_3.2
         U _ZSt4cout@@GLIBCPP_3.2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值