在路上...

The development of life
我们一直都在努力,有您的支持,将走得更远...

站内搜索: Google

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

如何在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 2009-08-26 21:18  palam  阅读(392)  评论(0编辑  收藏  举报