【问题标题】:How to compile and link together object files in C++ using the same header file?如何使用相同的头文件在 C++ 中编译和链接目标文件?
【发布时间】:2012-06-08 16:35:43
【问题描述】:

我遇到了这个问题,即 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 编译器解决这个问题。

【问题讨论】:

  • 欢迎来到 SO!请务必接受最有帮助的答案。

标签: c++ object gcc


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    g++ foo1.o foo2.o
    

    【讨论】:

      猜你喜欢
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      • 2018-10-26
      • 2016-01-28
      相关资源
      最近更新 更多