可能重复:
What is an undefined reference/unresolved external symbol error and how do I fix it?
我有main.cpp
:
#include "censorship_dec.h"
using namespace std;
int main () {
censorship();
return 0;
}
这是我的censorship_dec.h
:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
void censorship();
这是我的censorship_mng.cpp
:
#include "censorship_dec.h"
using namespace std;
void censorship()
{
cout << "bla bla bla" << endl;
}
我尝试在SSH(Linux)中运行这些文件,所以我写道:make main
,但我得到了:
g++ main.cpp -o main
/tmp/ccULJJMO.o: In function `main':
main.cpp:(.text+0x71): undefined reference to `censorship()'
collect2: ld returned 1 exit status
make: *** [main] Error 1
请帮忙!
答案 0 :(得分:5)
您必须指定定义censorship
的文件。
g++ main.cpp censorship_mng.cpp -o main
答案 1 :(得分:3)
您必须在编译命令中添加censorship_mng.cpp
:
g ++ main.cpp censorship_mng.cpp -o main
另一个解决方案(如果你真的不想改变你的编译命令)是void censorship();
到inline
函数并将其从.cpp
移到.h
。< / p>
censorship_dec.h
:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
inline void censorship()
{
// your code
}
从void censorship()
文件中删除censorship_mng.cpp
。
答案 2 :(得分:0)
一旦你的项目开始使用几个源文件编译成一个二进制文件,手工编译就会变得乏味。
这通常是您开始使用构建系统的时间,例如Makefile
使用默认构建规则的非常简单的Makefile看起来像
default: main
# these flags are here only for illustration purposes
CPPFLAGS=-I/usr/include
CFLAGS=-g -O3
CXXFLAGS=-g -O3
LDFLAGS=-lm
# objects (.o files) will be compiled automatically from matching .c and .cpp files
OBJECTS=bar.o bla.o foo.o main.o
# application "main" build-depends on all the objects (and linksthem together)
main: $(OBJECTS)