随笔 - 60, 文章 - 0, 评论 - 197, 引用 - 0
数据加载中……

C/C++ 混合编程

如何在C++中调用已经被编译好的C函数?下面的小例子展示了这个过程:

1.   
假设某C函数如下定义


/* file foo.c*/

#include <stdio.h>

int add(int x, int y)

{

  return x + y;

}

 

编译并生成DLL

gcc -fpic –c foo.c

gcc –shared -o foo.dll foo.o

 

2.    C++中调用这个被编译后的C函数

 

// file test.cpp

#include <iostream>

extern "C"

{

  int add(int x, int y);

}

 

int main()

{

#ifdef __cplusplus

  std::cout << "C++ defined" << std::endl;

#else

  std::cout << "C++ undefined" << std::endl;

#endif

 

  std::cout << add(1, 2) << std::endl;

  return 0;

}

编译并生成可执行文件:

g++ -o test.exe test.cpp foo.dll

 

3.    原因分析:

函数add()C编译器编译后在库中的名字为_add,而C++编译器则会产生_add_int_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用C函数。C++提供了一个C连接交换指定符号extern “C” 来解决这个问题。

附示例代码

posted on 2007-09-04 17:55 Normandy 阅读(2429) 评论(3)  编辑 收藏 引用 所属分类: Programming

评论

# re: C/C++ 混合编程  回复  更多评论   

学习,谢谢分享!
2008-01-02 12:42 | ngn999

# re: C/C++ 混合编程  回复  更多评论   

要是有详细分析 c和c++相互调用的问题的文章就好了
2008-01-03 10:36 |

# re: C/C++ 混合编程  回复  更多评论   

谢谢。。
2008-03-18 11:40 | lucky

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理