C++ `多个定义`错误指向pthread.h

C++ `多个定义`错误指向pthread.h,c++,c,gcc,C++,C,Gcc,使用GCC4.6.1,我在链接时遇到了一些非常奇怪的错误。我在命名空间spacetimealgebrage中定义了各种对象,编译器声称它们已经在pthread.h和std::_Vector\u base::_M_deallocate中定义。错误如下所示: build/temp.linux-x86_64-2.7/Waveforms.o: In function `~vector': GWFrames/Code/Waveforms.cpp:4978: multiple definition of `

使用GCC4.6.1,我在链接时遇到了一些非常奇怪的错误。我在命名空间
spacetimealgebrage
中定义了各种对象,编译器声称它们已经在
pthread.h
std::_Vector\u base::_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
实际上并不直接包含任何涉及我的对象的内容,当然也不在该名称空间中。我严重怀疑我的代码中是否存在错误,因为它可以与其他编译器一起编译,这是一个非常荒谬的错误

对于在同一位置定义的对象,“第一个定义的”引用从pthread更改为_M_deallocate,这让我感到特别奇怪。我没有使用涉及
SpacetimeAlgebra
命令。还有什么我可能做错的吗

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

另一方面,在Apple LLVM 5.1上编译工作没有任何问题。这里使用的编译器位于一个集群上,许多人一直在成功地使用它进行一些疯狂的编译,因此至少通常可以正常工作

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
您读取的错误消息是错误的,因为它令人困惑(而且可能有bug,不过在责怪编译器之前,我会检查您所有的
.o
中是否有调试符号)

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

不幸的是,我们无法看到
波形.cpp
,因此无法验证这一点

您读取的错误消息是错误的,因为它令人困惑(而且可能有bug,不过在责怪编译器之前,我会检查您所有的
.o
中是否有调试符号)

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


不幸的是,我们无法看到
波形.cpp
,因此无法验证。请显示您的代码。没有办法如实回答这个问题。顺便说一句,我没有投反对票。如果我写的话,我会写“-1”。您被匿名驱动器下选程序击中。可能编译器有点混乱-我很确定您的符号没有在pthread中定义,我希望SpaceTimeAlgebra无论如何都不是pthread库的一部分。@DavidHammen代码或实际的链接器命令行?我不太确定这是否真的是一个代码问题:-/…@πάνταῥεῖ - 事实上,一个最低限度的工作示例会很好。没有人想看到这里发布的数千行代码。MWE总是可能的。如果您还没有尝试制作一个,那么您还没有处于调试阶段,在internet上发布是合适的。更重要的是,如果没有MWE,这不适用于堆栈溢出,因为它不会帮助任何其他人。显示您的代码。没有办法如实回答这个问题。顺便说一句,我没有投反对票。如果我写的话,我会写“-1”。您被匿名驱动器下选程序击中。可能编译器有点混乱-我很确定您的符号没有在pthread中定义,我希望SpaceTimeAlgebra无论如何都不是pthread库的一部分。@DavidHammen代码或实际的链接器命令行?我不太确定这是否真的是一个代码问题:-/…@πάνταῥεῖ - 事实上,一个最低限度的工作示例会很好。没有人想看到这里发布的数千行代码。MWE总是可能的。如果您还没有尝试制作一个,那么您还没有处于调试阶段,在internet上发布是合适的。更重要的是,如果没有MWE,这不适用于堆栈溢出,因为它永远不会帮助其他任何人。