0

可能重复:
什么是未定义的引用/未解决的外部符号错误,我该如何解决?

我有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

请帮忙!

4

3 回答 3

5

您必须指定censorship定义的文件。

g++ main.cpp censorship_mng.cpp -o main
于 2013-01-15T11:37:51.117 回答
3

您必须censorship_mng.cpp在编译命令中添加:

g++ main.cpp censorship_mng.cpp -o main


另一种解决方案(如果您真的不想更改编译命令)是制作一个void censorship();函数inline并将其从.cpp..h

censorship_dec.h

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

inline void censorship()
{
  // your code
}

void censorship()censorship_mng.cpp文件中删除。

于 2013-01-15T11:37:54.547 回答
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)
于 2013-01-15T11:49:49.460 回答