2011-01-21 41 views

回答

3

您没有将您的main对象链接到您的add之一,因此当链接器尝试构建可执行文件时,它无法找到它使用的符号add(int, int)的定义。

你应该编译main对象,add对象,将它们链接在一起,就像这样:

g++ -c -o main.o main.cpp 
g++ -c -o add.o add.cpp 
g++ -o executable main.o add.o 

g++ -o executable main.cpp add.cpp 

这将编译add.cpp和main.cpp中一起

+0

感谢您的答复。它现在有效。那么,将它们一起编译的“关键”是什么?为什么你使用“链接在一起”而我们正在做的是编译这两个对象?谢谢。 – Simplicity

+0

@pero。如果我使用解决方案的第一种形式,则会出现相同的错误。我键入例如---> g ++ main.cc -o main.o(我正在使用Cygwin)。为什么错误出现?谢谢。 – Simplicity

+0

@SWEngineer:你需要使用-c来告诉编译器不要链接,而只是为了编译(和/或汇编)。 编译程序由几个阶段组成。最后一个是链接,它是当你真正建立你的可执行文件时,把所有东西放在你的源文件中。 – peoro

1

看起来你没有将第二个.cpp文件链接到最终的可执行文件中。无论是编译并在同一时间将它们链接:

$ c++ -Wall -Werror -pedantic -g -otest1 add.cpp main.cpp 

或分开,然后链接它们编译:

$ c++ -Wall -Werror -pedantic -g -c main.cpp 
$ c++ -Wall -Werror -pedantic -g -c add.cpp 
$ c++ -Wall -Werror -pedantic -g -otest1 add.o main.o