c++ - 混合 C 和 C++...未定义的函数引用

标签 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);

CyBtldr_ProgressUpdate 在 C 中也被定义为:

typedef void CyBtldr_ProgressUpdate(uint8_t arrayId, uint16_t rowNum);

我收到以下 undefined reference 错误。我错过了什么吗?

.\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))'

最佳答案

你需要

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";
}

如需详细说明及更多信息,read this documentation .

关于c++ - 混合 C 和 C++...未定义的函数引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45518413/

相关文章:

c - 如何仅使用 C 列出和操作 Windows 文件?

C++对`vtable的 undefined reference

c - 链接 pthread 库问题

c++ - C++中创建堆

从 2x3 数组矩阵计算行列式

c++ - 使用 boost::mpl::bool_ 而不是 const bool 的优点

c - 带有 typedef 结构的 extern const

g++ - 未定义对 `SetTextColor@8' 的引用

c++ - Const 数据类型不能分配给非常量数据类型

C++Builder XE 原始 SSL 套接字