在 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"的主要内容,如果未能解决你的问题,请参考以下文章

浅谈extern(C++)

c++面试常见300问

C++编译过的C代码为什么要用extern C

C 与 C++ 中的外部函数

extern “C”

C和C++混合编程(__cplusplus 与 external "c" 的使用)