kjg*_*ory 1 c c++ undefined-reference
在一个 C++ 项目中,我试图调用这个在 C 中定义的函数:
int CyBtldr_RunAction(CyBtldr_Action action, const char* file, const uint8_t* securityKey,
uint8_t appId, CyBtldr_CommunicationsData* comm, CyBtldr_ProgressUpdate* update);
Run Code Online (Sandbox Code Playgroud)
CyBtldr_ProgressUpdate 也在 C 中定义为:
typedef void CyBtldr_ProgressUpdate(uint8_t arrayId, uint16_t rowNum);
Run Code Online (Sandbox Code Playgroud)
我收到以下未定义的参考错误。我错过了什么吗?
.\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))'
Run Code Online (Sandbox Code Playgroud)
你需要
extern "C"
Run Code Online (Sandbox Code Playgroud)
因为 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);
}
Run Code Online (Sandbox Code Playgroud)
或者包含声明它的文件,比如
extern "C" {
#include "cybtldr_runaction_header.h";
}
Run Code Online (Sandbox Code Playgroud)
有关扩展说明和更多信息,请阅读此文档。