在 C++ 中使用 C 函数 使用 extern "C"
Posted
技术标签:
【中文标题】在 C++ 中使用 C 函数 使用 extern "C"【英文标题】:Using C Functions in C++ Using extern "C" 【发布时间】:2021-07-15 11:47:26 【问题描述】:我正在尝试使用 extern "C" 在 Cpp 代码中访问我的两个 C 函数。我使用它如下:
#include <stdio.h>
#include <stdlib.h>
#include <cstdio>
extern "C"
#include "pltfrm.h"
#include "xil_printf.h"
int main()
init_platform();
print("Hello World\n\r");
print("Successfully ran Hello World application");
cleanup_platform();
return 0;
函数"init_platform"
和"cleanup_platform"
在"pltfrm.h"
中声明
我在这两个函数上都收到“未定义的引用”错误。我做错了什么? iam 使用 c++ 空项目模板的 eclipse 构建项目选项进行编译。
【问题讨论】:
这里的关键字是declared,而不是defined。您很可能没有链接它们。除非你确切地展示你是如何编译代码的,否则我们不能说太多。 模块中的函数是否编译为c
?要么您不链接它们,要么它们被编译为名称混乱的cpp
函数,这也会导致undefined reference
链接器错误,因为名称不匹配。
我最初删除了eclipse 和g++ 标签,但您的问题的答案取决于您如何编译您的项目。你是直接使用Eclipse项目配置、make、CMake还是G++?
C++ 原生支持 C 代码。在您的情况下,extern "C"
是多余的,仅当 C 代码访问 C++ 函数时才需要它,反之亦然。
在两种语言中使用标头的常规方法是在标头中添加条件 extern "C"
包装器。
【参考方案1】:
该消息来自链接步骤,即编译所有源文件并且链接器尝试将所有函数连接到函数调用。
您可能需要链接到某个库或将源文件(对于您添加的 c 头文件)添加到您的项目中。
【讨论】:
我在 Eclipse 中使用了 cpp 项目模板,并在源代码和编译中添加了我的 .c 和 .h 文件。我没有单独编译 c 文件。我是 eclipse 的新手,所以我不知道如何更改它的编译 好的,好久没用过eclipses项目了。这有帮助吗? dzone.com/articles/how-add-existing-files-eclipse【参考方案2】:@Gotiasits 答案在这种情况下很有帮助。我删除了 extern C,似乎有原生支持。将在目标中运行可执行文件并检查
【讨论】:
以上是关于在 C++ 中使用 C 函数 使用 extern "C"的主要内容,如果未能解决你的问题,请参考以下文章