在 C++ 项目中,我尝试调用这个在 C 中定义的函数:
int CyBtldr_RunAction(CyBtldr_Action action, const char* file, const uint8_t* securityKey,
uint8_t appId, CyBtldr_CommunicationsData* comm, CyBtldr_ProgressUpdate* update);
CyBtldr_ProgressUpdate 在 C 中也定义为:
typedef void CyBtldr_ProgressUpdate(uint8_t arrayId, uint16_t rowNum);
我收到以下未定义的参考错误。我错过了什么吗?
.\bootloader.cpp:88: error: undefined reference to 'CyBtldr_RunAction(CyBtldr_Action, char const*, unsigned char const*, unsigned char, CyBtldr_CommunicationsData*, void (*)(unsigned char, unsigned short))'
You need
extern "C"
因为 C++ 函数名称在编译时会更改。这就是 C++ 中允许函数和方法重载的原因。
您可以使用它来包装函数声明,如下所示
extern "C" {
int CyBtldr_RunAction(CyBtldr_Action action, const char* file, const uint8_t* securityKey, uint8_t appId, CyBtldr_CommunicationsData* comm, CyBtldr_ProgressUpdate* update);
}
或者将文件包含在声明的位置,例如
extern "C" {
#include "cybtldr_runaction_header.h";
}
如需详细解释等,阅读本文档 https://isocpp.org/wiki/faq/mixing-c-and-cpp.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)