【问题标题】:Using C Functions in C++ Using extern "C"在 C++ 中使用 C 函数 使用 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 链接器错误,因为名称不匹配。
  • 我最初删除了eclipseg++ 标签,但您的问题的答案取决于您如何编译您的项目。你是直接使用Eclipse项目配置、make、CMake还是G++?
  • C++ 原生支持 C 代码。在您的情况下,extern "C" 是多余的,仅当 C 代码访问 C++ 函数时才需要它,反之亦然。
  • 在两种语言中使用标头的常规方法是在标头中添加条件 extern "C" 包装器。

标签: c++ c eclipse g++


【解决方案1】:

该消息来自链接步骤,即编译所有源文件并且链接器尝试将所有函数连接到函数调用。

您可能需要链接到某个库或将源文件(对于您添加的 c 头文件)添加到您的项目中。

【讨论】:

  • 我在 Eclipse 中使用了 cpp 项目模板,并在源代码和编译中添加了我的 .c 和 .h 文件。我没有单独编译 c 文件。我是 eclipse 的新手,所以我不知道如何更改它的编译
  • 好的,好久没用过eclipses项目了。这有帮助吗? dzone.com/articles/how-add-existing-files-eclipse
【解决方案2】:

@Gotiasits 答案在这种情况下很有帮助。我删除了 extern C,似乎有原生支持。将在目标中运行可执行文件并检查

【讨论】:

    猜你喜欢
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    相关资源
    最近更新 更多