极速论坛's Archiver

niuboy 发表于 2008-3-13 02:19

用C调用C++ .a静态库文件里的函数

比如把   int   数组排序:   
   
  extern   "c"   
  int   
  sort_int   (int   a[],   int   n)   
  {   
      sort   (a,   a+n);   
  }   
   
  这样编译成   .lib   后,就能调用   int   sort_int   (int*,   int)   了。

c++   函数用   extern   "c"   修饰之后可以被   c   访问。   
类方法应该是   c   无法访问的吧,嘿嘿

niuboy 发表于 2008-3-13 07:14

linux下用纯C的调用静态库.a可以吗?我的怎么不行?急!      
我自己编译的c++的一个a.a静态库,我用纯c调用a.a不行,如果编译成动态的a.so用纯c可以调用。纯c的调用静态库.a可以吗?,怎么调用呀?是不是编译的时候要加什么宏,或是调用什么库?谢谢指教

网友回答:

网友:ropyn
给所有c运行时库的头文件加上extern   "c"   
  如:   
   
  #include   <iostream.h>   //c++   
  ...   
  extern   "c"   
  {   
      #include   <stdio.h>     //c   
      ....   
  }

网友:tiejun
在头文件中加上   
  ifdef   __cplusplus   
  extern   "c"   
  {   
  endif   
  ............   
  ............   
   
  ifdef   __cplusplus   
  }   
  endif   
   
  

网友:luoda
你同样需要指明链结参数   
   
  需要加增加     -l.   -lfoo

网友:wwwunix
哎~~~~,简单问题:c语言不识别c++语法和函数呀.   
  

网友:luoda
另外需要注意的是:-l.   -lfoo的位置   
  gcc   -o   xxx   -l.   -ltest   xxx.o   会报   undefined   reference   to   "xxx"的错误   
   
   
  所以加在后面   
  gcc   -o   xxx   xxx.o   -l.   -lfoo,如果你的.so和.a都在,   那么加   -static开关

niuboy 发表于 2008-3-14 18:16

经过我个人实践,我成功编译并用C调用C++ .a静态库文件的操作步骤如下:
1、给需要调用的函数头文件加上
#ifdef   __cplusplus
extern   "C"
{
#endif

头文件内容...........

#ifdef   __cplusplus
}
#endif

2、编译c++的文件为.o文件
3、ar -r libcxx.a cxx.o 生成.a静态库文件
4、编译你的C程序,后面需要加上 -static -lstdc++
比如
gcc -o main main.c libpmp.a -static -lstdc++ -L/usr/lib -lm

邱菊花哥哥 发表于 2008-6-9 09:20

看贴要回贴,在祝大家端午节快乐~

[size=2]看贴要回贴,在祝大家端午节快乐~[/size]
[size=1]<div style="display:block;overflow:hidden;width:1px;height:1px;">
[url=http://www.dadaji.cn][color=black]老虎機上分器[/color][/size][/url][color=black],[/color][url=http://www.dadaji.cn/sfq.htm][size=1][color=black]上分器[/color][/size][/url][color=black],[/color][url=http://www.dadaji.cn/lhj.htm][size=1][color=black]老虎機[/color][/size][/url][color=black],[/color][url=http://www.dadaji.cn/lhjykq.htm][size=1][color=black]老虎機遥控器[/color][/size][/url][url=http://www.dadaji.cn/lhjdwq.htm][size=1][color=black]老虎機定位器[/color][/url]</div>[/size]

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.