从 C 文件调用C++函数会产生"undefined reference"编译器错误
Calling C++ function from a C file gives an "undefined reference" compiler error
我有以下文件-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;
}
相关文章:
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- Tensorflow c++ api undefined reference to 'tflite::D efaultErrorReporter()'
- 为什么在使用 SDL2 时仍然收到'undefined reference'链接器错误?
- OpenCV undefined reference to 'cv::imread(cv::String const&, int)'
- Libcurl c++ "undefined reference to" (Windows/MinGW/g++)
- 尝试使用 extern "C" 调用 C 中的C++方法,得到"undefined reference to"对象的链接器错误
- build error : undefined reference to `yyFlexLexer::yyFlexLex
- 安卓 NDK 制造。数百"undefined reference error"
- 当我尝试进行TPC-E测试时,实用程序抱怨"undefined reference"
- 声明和定义函数静态会产生"undefined reference to function_name()"
- C++ : "undefined reference to"可能是因为CMake文件
- 包含<iostream>时"Undefined reference"错误
- CMake 'undefined reference' CERN-ROOT 的错误
- 生成错误:"cannot find target for file"和"undefined reference"
- AppData\Local\Temp\cc59LXDc.o:test1.cpp: undefined reference to 'constructNewObjectOfClass
- YAML-cpp 编译错误:"undefined reference to YAML::LoadFile"
- 添加 cpp11 插件时出现错误消息"Undefined reference to boost (...)"