我有以下文件 - main.c,RULE_MINE.h和RULE_MINE.cpp
main.c中
#include "RULE_MINE.h"
int main()
{
checker();
}
Run Code Online (Sandbox Code Playgroud)
RULE_MINE.h
#ifndef HEADER_FILE
#define HEADER_FILE
#ifdef __cplusplus
extern "C"
{
#endif
//declare functions here
void checker();
#ifdef __cplusplus
}
#endif
#endif
Run Code Online (Sandbox Code Playgroud)
和RULE_MINE.cpp
#include <bits/stdc++.h>
#include "RULE_MINE.h"
using namespace std;
void checker()
{
cout<<"whaaat?"<<endl;
}
Run Code Online (Sandbox Code Playgroud)
我正在编译以下方式
$ g++ RULE_MINE.h
$ g++ -c RULE_MINE.cpp
$ g++ main.c
Run Code Online (Sandbox Code Playgroud)
为此,我收到编译器错误
main.c:(.text+0x1947): undefined reference to 'checker'
collect2: error: ld returned 1 exit
Run Code Online (Sandbox Code Playgroud)
我无法找到错误.但是假设我在main.c文件中包含#include"RULE_MINE.cpp",那么它正在运行并提供输出.你能解释一下我收到这个错误的原因吗?
更换void checker()用extern "C" void checker在你cpp的文件,以确保正确连接(C或CDECL联动).
您的编译命令不正确,您不编译头文件.使用:
$ g++ RULE_MINE.cpp main.c
Run Code Online (Sandbox Code Playgroud)
也许更多的旗帜(-W -Wall -O2例如)
要么
$ g++ -c RULE_MINE.cpp
$ g++ -c main.c # or gcc -c main.c
$ g++ RULE_MINE.o main.o
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1197 次 |
| 最近记录: |