解决C++ 调用 C 函数时unresolved external symbol "int __cdecl addInC1(void)" (?addInC1@@YAHXZ)之类的错误

原创 2011年10月28日 12:06:59
 

直接在Cpp里面写 #include "c.h"引用C头文件会在连接的时候出现此类错误:cpp.obj : error LNK2001: unresolved external symbol "int __cdecl add(int,int)" ([email=?add@@YAHHH@Z]?add@@YAHHH@Z[/email]), 根本原因在于C++ 和 C在对函数命名方式的不同。

 

C对函数的命名: _add  

C++对函数的命名: =?add@@YAHHH@Z

 

解决方案:

  1. 在不修改原来C头文件的基础之上 ,在cpp文件里面 extern "C" {#include "c.h"} ,extern "C" {} 表示用C的方式解释代码,这样c.h里面的代码及函数都被解释成C形式。
  2. 或者修改原来C头文件:

#ifdef __cplusplus
extern "C"
{
#endif

/*all of your code in here*/

#ifdef __cplusplus
}
#endif

例子:

c1.h :

#ifndef c1_H
#define c1_H

int addInC1();
#endif

c2.h

#ifndef c2_H
#define c2_H
#ifdef __cplusplus
extern "C"
{
#endif
int addInC2();

#ifdef __cplusplus
}
#endif
#endif

cpp.cpp:

#include "c1.h"
#include "c2.h"

int main()
{
    int t1=addInC1();
 int t2=addInC2();

};

error:

1 >cpp.obj : error LNK2019: unresolved external symbol _addInC2 referenced in function _main
2>cpp.obj : error LNK2019: unresolved external symbol "int __cdecl addInC1(void)" (?addInC1@@YAHXZ) referenced in function _main

错误1是找不到C函数 _addInC2 ,错误2是找不到C++函数 (?addInC1@@YAHXZ).

解决错误2:

修改 #include "c1.h"   

extern "C"
{
#include "c1.h"
}

解决错误1:加一个c2.c文件,去实现addInC2.加一个c1.c文件,去实现addInC1.

参考 :http://www.cnblogs.com/kenkofox/archive/2009/11/05/1597053.html

Pro*C "error LNK2001: unresolved external symbol "void __cdecl sqlcxt" 解决方法

在做数据库的大作业,VC+Pro*C的小程序, 写出来的.pc文件使用Pro*C预编译为.cpp文件后,进行链接时出错: ....obj: error LNK2001: unresolved ex...
  • rznice
  • rznice
  • 2011-01-01 14:03:00
  • 9072

C51编译警告“*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL” 及extern的运用剖析

 C51编译警告“*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL”  *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL    ...
  • liufei_learning
  • liufei_learning
  • 2010-07-15 16:35:00
  • 29987

error LNK2019: unresolved external symbol

error LNK2019: unresolved external symbol(2007-05-28 10:23:43) 转载   分类:Programe(C/C++/VC/....
  • jtop0
  • jtop0
  • 2010-08-01 03:29:00
  • 64053

error LNK2001: unresolved external symbol "int __cdecl"等解决方法

遇到error LNK2001: unresolved external symbol "int __cdecl”,找了很久才找到满意的答案。其实直接google就能找到最贴切的解释。 在一个工程中...
  • zhoujunlintianxia
  • zhoujunlintianxia
  • 2015-02-07 15:03:31
  • 4193

解决vc C++ 调用 C 函数时unresolved external symbol " __cdecl 。。。无法解析的外部符合

今天才体会到区分C和C++的重要性,原来C++为了支持重载,会对函数名字进行处理,而C不会,这就导致在经过C++编译器处理后,找不到某个函数,所以需要以下解决方案: 引用C中变量时,需要如此。  ...
  • heisedeyongheng
  • heisedeyongheng
  • 2012-01-30 21:52:32
  • 1273

Error LNK2019:Unresolved External Symbol 解决方案

参考:http://www.educity.cn/wenda/351518.html Error LNK2019:Unresolved External Symbol *** Referenced ...
  • rudy_axle
  • rudy_axle
  • 2014-12-26 18:07:06
  • 7654

C++ error LNK2019: "unresolved external symbol"解决方法

1>  LINK : D:\code\OpenGLTest\Debug\OpenGLTest.exe not found or not built by the last incremental li...
  • jd_19900903
  • jd_19900903
  • 2014-05-19 16:41:16
  • 6292

error LNK2019: unresolved external symbol 问题

main.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall CvSVM::~CvSVM(void)...
  • chenbang110
  • chenbang110
  • 2012-05-12 11:02:40
  • 27274

C++ error:LNK2005 已经在*.obj中定义

一般在编程有多个CPP及头文件时有可能出现以下错误: error LNK2005: "void __cdecl test2(void)" (?test2@@YAXXZ) 已经在 源2.obj...
  • qq_32541007
  • qq_32541007
  • 2016-06-07 23:01:36
  • 5886

关于error LNK2019::Unresolved External Symbol * Referenced In Function..解决办法 2

前几天我转了一篇关于error LNK2019::Unresolved External Symbol * Referenced In Function..解决办法的博客,但我自己后来按照上面的办法并...
  • baidu_24736703
  • baidu_24736703
  • 2016-05-17 22:13:04
  • 4472
收藏助手
不良信息举报
您举报文章:解决C++ 调用 C 函数时unresolved external symbol "int __cdecl addInC1(void)" (?addInC1@@YAHXZ)之类的错误
举报原因:
原因补充:

(最多只允许输入30个字)