解决C++ 调用 C 函数时unresolved external symbol "int __cdecl addInC1(void)" (?addInC1@@YAHXZ)之类的错误
来源:互联网 发布:php addslashes缺点 编辑:程序博客网 时间:2024/06/07 23:33
直接在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
解决方案:
- 在不修改原来C头文件的基础之上 ,在cpp文件里面 extern "C" {#include "c.h"} ,extern "C" {} 表示用C的方式解释代码,这样c.h里面的代码及函数都被解释成C形式。
- 或者修改原来C头文件:
#ifdef __cplusplus
extern "C"
{
#endif/*all of your code in here*/
#ifdef __cplusplus
}
#endif
例子:
c1.h :
#ifndef c1_H
#define c1_Hint 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
- 解决C++ 调用 C 函数时unresolved external symbol "int __cdecl addInC1(void)" (?addInC1@@YAHXZ)之类的错误
- 解决vc C++ 调用 C 函数时unresolved external symbol " __cdecl 。。。无法解析的外部符合
- VC6调用VC2005编译生成的lib/dll库出现“unresolved external symbol "__declspec(dllimport) int __cdecl”错误的原因
- Pro*C "error LNK2001: unresolved external symbol "void __cdecl sqlcxt" 解决方法
- error LNK2019: unresolved external symbol "void __cdecl sqlcxt(void * *,unsigned int *,struct sqlexd
- C和C++混合编程中出现error LNK2001: unresolved external symbol "void __cdecl av_free(void *)" (?av_free@@YAXP
- error LNK2001: unresolved external symbol "void * __cdecl operator new(unsigned int)"
- error LNK2019: unresolved external symbol "void __cdecl MD5(char const *,int,char *)" (?MD5@@YAXPBDH
- unresolved external symbol __beginthreadex错误的解决
- unresolved external symbol __forceAtlDllManifest错误的解决
- error LNK2001: unresolved external symbol "void __cdecl 怎么办
- error LNK2001: unresolved external symbol "void __cdecl av_close_input_file(struct AVFormatContext *
- error LNK2001: unresolved external symbol "int __cdecl"等解决方法
- unresolved external symbol _RtlStringVPrintfWorkerW 驱动函数链接错误解决
- unresolved external symbol _RtlStringVPrintfWorkerW 驱动函数链接错误解决
- C和C++相互调用 error LNK2001: unresolved external symbol
- 链接错误"unresolved external symbol _main"的解决
- 链接错误"unresolved external symbol _main"的解决(转载)
- Excel VBA编程常用语句300句
- 招聘链接
- C++ 类的大小
- 编程技术面试的五大要点
- Boost 1.47.0编译
- 解决C++ 调用 C 函数时unresolved external symbol "int __cdecl addInC1(void)" (?addInC1@@YAHXZ)之类的错误
- freemarker中关于当前宏上下文CurrentMacroContext的指向
- vim linux 配置 tab 缩进 中文 utf-8 等
- bcopy,memccpy,memcpy,memmove,strcpy,strncpy
- 记GDD2011--谷歌开发者日技术大会
- [oracle] 备忘录1 删除与连接远程oracle
- 01背包问题中恰好为重量T
- 测试设备
- IIS 7 Reset all Delegation 后 - 发生500 内部服务器错误 (500 Internal server error)