Chinaunix首页 | 论坛 | 博客
  • 博客访问: 621298
  • 博文数量: 172
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 1252
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-29 22:26
文章分类

全部博文(172)

文章存档

2011年(6)

2010年(7)

2009年(159)

我的朋友

分类: LINUX

2009-09-14 16:42:53

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

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


/* file foo.c*/

#include

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

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” 来解决这个问题。

阅读(1584) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~