从 C 文件调用C++函数会产生"undefined reference"编译器错误

Calling C++ function from a C file gives an "undefined reference" compiler error

本文关键字:undefined reference 错误 编译器 文件 调用 C++ 函数      更新时间:2023-10-16

我有以下文件-main.c、RULE_MINE.h和RULE_MINE.cpp

main.c

#include "RULE_MINE.h"
int main()
{
checker();
}

RULE_MINE.h

#ifndef HEADER_FILE
#define HEADER_FILE
#ifdef __cplusplus
extern "C"
{
#endif
//declare functions here
void checker();
#ifdef __cplusplus
}
#endif
#endif

RULE_MINE.cpp

#include <bits/stdc++.h>
#include "RULE_MINE.h"
using namespace std;
void checker()
{
cout<<"whaaat?"<<endl;
}

我正在以以下方式编译

$ g++ RULE_MINE.h
$ g++ -c RULE_MINE.cpp
$ g++ main.c

为此,我得到了一个编译器错误

main.c:(.text+0x1947): undefined reference to 'checker'
collect2: error: ld returned 1 exit

我找不到错误是什么。但假设在主.c文件中,如果我包含#include"RULE_MINE.cpp">,那么它运行正常并给出输出。你能解释一下我为什么会犯这个错误吗?

cpp文件中的void checker()替换为extern "C" void checker,以确保正确的链接(C或cdecl链接)。


您的编译命令不正确,您没有编译头文件。用途:

$ g++ RULE_MINE.cpp main.c

也许还有更多的标志(例如-W -Wall -O2)

$ g++ -c RULE_MINE.cpp
$ g++ -c main.c # or gcc -c main.c
$ g++ RULE_MINE.o main.o

您的实现也需要extern

extern "C" void checker()
{
cout<<"whaaat?"<<endl;
}