"多个定义"错误指向pthread.h

`Multiple definitions` error points to pthread.h

本文关键字:quot pthread 定义 错误      更新时间:2023-10-16

使用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实际上并不直接包含任何涉及我的对象的内容,当然也不在那个名称空间中。我非常怀疑这个错误是否存在于我的代码中,因为它与其他编译器一起编译得很好,这是一个非常荒谬的错误。

对于在同一位置定义的对象,"第一个定义的"引用从pthread变为_M_deallocate,这让我感到特别奇怪。我没有任何涉及SpacetimeAlgebrausing命令。我可能做错了什么吗?

编译器命令和完整的错误输出就在这里。该命令是由python的distutils创建的。代码本身就在这里,位于hppcpp文件中。(这些大多是Gaigen生成的,我做了一些调整。(

与此相关的是,该编译在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

您读错了错误消息,因为它令人困惑(而且可能有错误,尽管在指责编译器之前,我会检查您的.o中是否有所有的调试符号(。

错误告诉您已经在Waveforms.cppSpacetimeAlgebra.cpp中定义了SpacetimeAlgebra::psI

不幸的是,我们看不到Waveforms.cpp,因此无法验证。