我有以下文件 - 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
我无法找到错误。但是假设我在main.c文件中包含 #include&#34; RULE_MINE.cpp&#34; ,那么它正在运行并提供输出。 你能解释一下我收到这个错误的原因吗?
答案 0 :(得分:5)
将void checker()
替换为extern "C" void checker
文件中的cpp
,以确保正确的链接(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
答案 1 :(得分:4)
您的实施也需要extern
:
extern "C" void checker()
{
cout<<"whaaat?"<<endl;
}