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

Jus*_*tin 7 c++ gcc object

我遇到这个问题,GCC编译器在链接我在一起的两个目标文件时似乎失败了.两个目标文件foo1.ccfoo2.cc包含来自头文件的类foo1.hh.此外,头文件foo.hh具有出现在其中的对象实例的外部声明foo1.cc.

应当指出的是,头文件foo.hh将只一次两个源文件之间的定义foo1.ccfoo2.cc.

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

g++ foo1.cc foo2.cc
Run Code Online (Sandbox Code Playgroud)

上述命令将产生叫做可执行a.out.

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

g++ -c foo1.cc
g++ -c foo2.cc
g++ -o foo1.o foo2.o
Run Code Online (Sandbox Code Playgroud)

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

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

not*_*row 10

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

g++ -c foo1.cc
g++ -c foo2.cc
g++ -o foo foo1.o foo2.o
Run Code Online (Sandbox Code Playgroud)

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


jxh*_*jxh 5

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

g++ foo1.o foo2.o
Run Code Online (Sandbox Code Playgroud)