C++调用C函数与Extern "C"
来源:互联网 发布:淘宝禁售商品有哪些 编辑:程序博客网 时间:2024/05/18 12:02
Author: YuMaNzI
Date: 2015/04/13
---------------------------------------------------------------
在实际中,我们可能会遇到开发一个CPP的项目,而某一个模块的功能已经有现有的C实现的库可以使用的情况。在CPP中通过Include头文件+lib或其它的方式调用相应的C函数,编译时会报LNK2001 unresolved external symbol错误,即找不到头文件对应的函数体。出现这种错误的根本原因在于CPP在处理重载时对函数名做了特殊的处理。
C语言是不支持重载的,即所有函数不能重名。另一方面,C++是支持重载的,函数重名则进一步用变量区分不同的重名函数。因此对同一个简单的函数声明:
int add(int a, int b);CPP会产生_add_int_int之类的名字,即用函数名+变量的形式支持函数的重载;而C则直接生成_add作为函数的名字。在默认的链接方式下,CPP按照自己的方式生成函数名,即认为此函数的名字是带变量类型的。后续在lib文件中按照这个名字找函数体时,由于找不到,最终返回LNK2001的错误。
为了解决这个问题,CPP提供了一个C引用的指定符号,例如在某CPP程序中要引用i_am_a_c_program.h中的函数,同时这些函数用C实现,可以通过
extern "C"{#include "i_am_a_c_program.c"}告诉CPP的编辑器,这些函数使用C实现的,在链接阶段找它们的函数名时按照C的风格来。这样问题就解决了。
希望这些能解决你看本文之前的问题。
-------------------------------------------------------------------------------------------
以上内容部分参考:http://blog.csdn.net/jirongzi_cs2011/article/details/14091163
0 0
- C++调用C函数与Extern "C"
- extern C实现C与C++函数的相互调用
- extern C(C++与C实现相互函数的调用)
- 函数重载与Extern "C"
- extern与extern "C"
- extern与extern “C”
- extern 与 extern "C"
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- C语言extern调用外部函数
- extern c , c++ 调用c
- extern "C" C 调用c++
- C/C++ 函数的编译方式与调用约定以及extern “C”的使用
- C++调用C函数,为什么要加extern "C"?
- 【总结】Effective java经验之谈,通用方法
- JSqlParser系列之二代码结构(转载)
- 开篇--印象仙剑
- C/C++ 统计函数调用时间
- CSS样式表的规则
- C++调用C函数与Extern "C"
- stm32:CT117E之LED篇
- 第一个c#程序
- [Hadoop]Hadoop上传本地文件到HDFS
- ERROR 1366 (HY000):Incorrect string value解决方案(亲测)
- 简单实现查看系统字节序
- 交换内容
- 控制器技术
- 解题报告 之 HDU4289 Control