8

我遇到了这个问题,当将我拥有的两个目标文件链接在一起时,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 编译器解决这个问题。

4

2 回答 2

10

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

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

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

于 2012-06-04T15:46:29.980 回答
4

您的最后一个命令是链接命令:从 foo2.o 创建一个可执行文件并将该可执行文件命名为 foo1.o。链接器可能找不到创建可执行文件所需的所有信息,因为您的意图是同时使用 foo1.o 和 foo2.o。完全省略-o标志:

g++ foo1.o foo2.o
于 2012-06-04T15:48:48.127 回答