cpp文件中使用c的函数,编译没有问题,链接的时候出现error LNK2001 LNK2019: 无法解析的外部符号
如下:
1>正在链接...
1>SrcCode.obj : error LNK2001: 无法解析的外部符号 "int __cdecl InitRWLock(struct _RWLock *)" (?InitRWLock@@YAHPAU_RWLock@@@Z)
1>SrcCode.obj : error LNK2001: 无法解析的外部符号 "int __cdecl DestroyRWLock(struct _RWLock *)" (?DestroyRWLock@@YAHPAU_RWLock@@@Z)
1>SrcCode.obj : error LNK2001: 无法解析的外部符号 "int __cdecl ReleaseWriteLock(struct _RWLock *)" (?ReleaseWriteLock@@YAHPAU_RWLock@@@Z)
1>SrcCode.obj : error LNK2001: 无法解析的外部符号 "int __cdecl AcquireWriteLock(struct _RWLock *)" (?AcquireWriteLock@@YAHPAU_RWLock@@@Z)
1>D:\shigz\Demo\VS2008\C++STL\Demo\Debug\MainSrc.exe : fatal error LNK1120: 9 个无法解析的外部命令
原因:需要在对 .C 的文件中的函数声明为导出使用函数,否则 .cpp 的文件中调用 .c 的文件时不知道 .c 的文件已经声明和实现了该函数
解决方法:
在调用函数的xx.h文件的首尾添加:
#ifdef __cplusplus (其中__cplusplus是cpp中自定义的一个宏!!!)
extern "C"{
#endif
//-------------开始写.h
#include<stdio.h>
xx.h的全部内容。
void function();
......
#ifdef __cplusplus
}
#endif
参考解释:
https://blog.csdn.net/jiqiren007/article/details/5933599
https://blog.csdn.net/yiling2012/article/details/31758237