使用gcc 4.6.1,我在链接时遇到了一些非常奇怪的错误。我已在命名空间SpacetimeAlgebra
中定义了各种对象,编译器声称它们已在pthread.h
和std::_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,位于hpp
和cpp
个文件中。 (这些主要是由Gaigen生成的,我做了一些调整。)
相关说明,编辑在Apple LLVM 5.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
,因此无法验证。