我试图从Visual Studio 2015中的C ++项目中调用C函数。我得到的错误是LNK2019“未解析的外部符号”
Error LNK2019 unresolved external symbol _Hsusrt_getTxBuffer referenced in function "private: bool __thiscall hsbuf::TxHsusrtBuffer::getBuffer(void)" (?getBuffer@TxHsusrtBuffer@hsbuf@@AAE_NXZ) inter_device_d3_r5 C:\[path]\build\test.obj
我有一个带有函数声明的.h文件和带有以下定义的.c文件。
NrcsDriver_HSUSRT_If.h:
//func prototype
void Hsusrt_getTxBuffer( ) ;
NrcsDriver_HSUSRT_If.c:
#include "NrcsDriver_HSUSRT_If.h"
void Hsusrt_getTxBuffer( )
{
//dummy func implementation here
}
我可以通过两种方式开展工作。一个是在C头文件
中附加C ++警卫的前后//#ifdef __cplusplus
//extern "C" {
//#endif
//func prototype
void Hsusrt_getTxBuffer( ) ;
//#ifdef __cplusplus
//extern }
//#endif
其次,我可以在test.cpp中做一个标准的#include,没有任何特殊的外部“C”警卫
**test.cpp**
#include "NrcsDriver_HSUSRT_If.h"
int main()
{
Hsusrt_getTxBuffer(); //works fine
}
但是,当我将#include包装在.cpp文件中的extern“C”中时,我很困惑。我读过的所有内容都要求这是包含C标头的正确方法。然而,这是我的项目失败的技术。
**test.cpp**
extern "C" {
#include "NrcsDriver_HSUSRT_If.h"
}
int main()
{
Hsusrt_getTxBuffer(); //does not work
}