如何使用相同的头文件在C ++中编译和链接目标文件?

时间:2012-06-04 15:43:35

标签: c++ object gcc

我遇到这个问题,GCC编译器在连接两个目标文件时似乎失败了。目标文件foo1.ccfoo2.cc都包含名为foo1.hh的头文件中的类。此外,头文件foo.hh具有foo1.cc中显示的对象实例的外部声明。

应该注意的是,头文件foo.hh只会在两个源文件foo1.ccfoo2.cc之间定义一次。

当我使用以下命令编译源文件时,一切似乎都有效:

g++ foo1.cc foo2.cc

上述命令将生成一个名为a.out的可执行文件。

当我尝试将源文件独立编译为目标文件时:

g++ -c foo1.cc
g++ -c foo2.cc
g++ -o foo1.o foo2.o

GCC编译器抱怨foo2.cc中有对函数的未定义引用。这些功能应在foo1.cc中定义;但是,链接器无法识别。

我想知道是否有办法解决GCC编译器的这个问题。

2 个答案:

答案 0 :(得分:9)

没有问题,你的gcc语法中有错误。

g++ -c foo1.cc
g++ -c foo2.cc
g++ -o foo foo1.o foo2.o

-o参数接受输出文件的名称,因此在您的情况下,它会用链接结果覆盖foo1.o。

答案 1 :(得分:3)

你的最后一个命令就是链接命令:用foo2.o创建一个可执行文件并命名可执行文件foo1.o.链接器可能找不到创建可执行文件所需的所有信息,因为您打算同时使用foo1.o和foo2.o.只需完全忽略-o标志:

g++ foo1.o foo2.o