"多个定义"错误指向pthread.h
`Multiple definitions` error points to pthread.h
使用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
实际上并不直接包含任何涉及我的对象的内容,当然也不在那个名称空间中。我非常怀疑这个错误是否存在于我的代码中,因为它与其他编译器一起编译得很好,这是一个非常荒谬的错误。
对于在同一位置定义的对象,"第一个定义的"引用从pthread变为_M_deallocate,这让我感到特别奇怪。我没有任何涉及SpacetimeAlgebra
的using
命令。我可能做错了什么吗?
编译器命令和完整的错误输出就在这里。该命令是由python的distutils创建的。代码本身就在这里,位于hpp
和cpp
文件中。(这些大多是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.cpp
和SpacetimeAlgebra.cpp
中定义了SpacetimeAlgebra::psI
。
不幸的是,我们看不到Waveforms.cpp
,因此无法验证。
相关文章:
- 在 c++11 中为 pthread 设置调度参数
- 如果不包含 pthread,为什么 GCC 的线程标准库实现会抛出异常?
- pthread只有在线程数量较少时才可以正常工作
- pthread执行时间比顺序执行时间差
- 使用 -pthread 如何不违反 ODR 规则?
- 使用 pthread 的多线程
- 销毁 pthread 互斥体和 C++ 中的取消初始化顺序
- 函数 AfxEndThread 中的读取访问冲突"pThread-> was nullptr"
- 锁定步进pthread互斥
- Pthread段错误,使用指向main中变量的指针
- pthread导致的内存泄漏
- GCC:--静态链接到pthread的整个存档配方在最近的GCC版本中停止工作
- 正确地编写一个类,并将pthread与vlc库和c++一起使用
- 直接读取 pthread 互斥锁的所有者字段是否安全?
- 'char (*RtlpNumberOf(T (&)[N]))[N]':无法从"char *"
- Arduino IDE 错误 - 无法找到数字文字运算符"运算符""f900ff"
- 为什么 pthread 会减慢代码速度?
- 对 pthread CLion 的未定义引用
- "inline"、"constexpr"或"noexcept"
- "非静态数据成员之前需要构造函数" - 我是否使用"boost::variant"