“多个定义”错误指向pthread.h

时间:2014-05-01 21:01:05

标签: c++ c gcc

使用gcc 4.6.1,我在链接时遇到了一些非常奇怪的错误。我已在命名空间SpacetimeAlgebra中定义了各种对象,编译器声称它们已在pthread.hstd::_Vector_base<double>::_M_deallocate中定义。错误看起来像这样:

build/temp.linux-x86_64-2.7/Waveforms.o: In function `~vector':
GWFrames/Code/Waveforms.cpp:4978: multiple definition of `SpacetimeAlgebra::I3'
build/temp.linux-x86_64-2.7/SpacetimeAlgebra/SpacetimeAlgebra.o:/usr/include/pthread.h:1112: first defined here

显然,pthread.h实际上并不直接包含涉及我的对象的任何内容,当然也不包含在该命名空间中。我严重怀疑错误是在我的代码中,因为它与其他编译器编译得很好,这是一个非常荒谬的错误。

特别奇怪的是,首先定义了&#34;&#34;对于在同一位置定义的对象,引用从pthread更改为_M_deallocate。我没有涉及using的任何SpacetimeAlgebra命令。还有别的我可能做错了吗?

编译器命令和完整错误输出为at this gist。该命令由python的distutils创建。代码本身为here,位于hppcpp个文件中。 (这些主要是由Gaigen生成的,我做了一些调整。)

相关说明,编辑在Apple LLVM 5.1上没有任何问题。这里使用的编译器是在很多人成功使用的集群上进行一些疯狂的编译,因此至少通常可以正常工作。

1 个答案:

答案 0 :(得分:4)

GWFrames/Code/Waveforms.cpp:4978: multiple definition of `SpacetimeAlgebra::psI'
build/temp.linux-x86_64-2.7/SpacetimeAlgebra/SpacetimeAlgebra.o:/usr/include/pthread.h:1112: first defined here

您错误地阅读错误消息,因为它令人困惑(并且可能有错误,但在指责编译器之前我会检查您是否在所有你的.o s。。

错误告诉您,您已在SpacetimeAlgebra::psI内和Waveforms.cpp内定义SpacetimeAlgebra.cpp

很遗憾,我们看不到Waveforms.cpp,因此无法验证。