我遇到了这个问题,当涉及到将我拥有的两个目标文件链接在一起时,GCC编译器似乎失败了。对象文件foo1.cc和foo2.cc都包含一个名为foo1.hh的头文件中的类。此外,头文件foo.hh具有出现在foo1.cc中的对象实例的外部声明。
需要注意的是,头文件foo.hh仅在两个源文件foo1.cc和foo2.cc之间定义一次。
当我使用以下命令编译源文件时,一切似乎都正常:
g++ foo1.cc foo2.cc上面的命令将生成一个名为a.out的可执行文件。
当我尝试独立地将源文件编译成目标文件时:
g++ -c foo1.cc
g++ -c foo2.cc
g++ -o foo1.o foo2.oGCC编译器抱怨说,foo2.cc中存在对函数的未定义引用。这些函数应该在foo1.cc中定义;但是,链接器无法识别这一点。
我想知道有没有办法解决这个问题的GCC编译器。
发布于 2012-06-04 23:46:30
没有问题,您的gcc语法有错误。
g++ -c foo1.cc
g++ -c foo2.cc
g++ -o foo foo1.o foo2.o-o参数接受输出文件的名称,因此在本例中,它将使用链接结果覆盖foo1.o。
发布于 2012-06-04 23:48:48
您的最后一个命令是链接命令:在foo2.o中创建一个可执行文件,并将其命名为foo1.o。链接器可能找不到创建可执行文件所需的所有信息,因为您的意图是同时使用foo1.o和foo2.o。只需完全省略-o标志:
g++ foo1.o foo2.ohttps://stackoverflow.com/questions/10884105
复制相似问题