我正在尝试将g++移植/构建到我的系统上,并在构建libstdc++时遇到以下错误:
.../gcc-4.6.2/i686-pc-linux-gnu/libstdc++-v3/include/mutex:226:50: 错误: 不能将'{0}'从''转换为'std::timed_mutex::__native_type {aka pthread_mutex_t}'
.../gcc-4.6.2/i686-pc-linux-gnu/libstdc++-v3/include/mutex:226:50: 错误: 不能将'{0}'从''转换为'std::timed_mutex::__native_type {aka pthread_mutex_t}'
include/mutex
中相关代码如下:class timed_mutex
{
// ...
__native_type _M_mutex;
// ...
timed_mutex() : _M_mutex(__GTHREAD_MUTEX_INIT) { } // Line 226
// ...
}
__native_type
是 pthread_mutex_t
,__GTHREAD_MUTEX_INIT
被展开为 {0}
。
我对 C++ 不是很熟悉,只了解 C,但我在这里没有看到任何明显的错误。那么这个错误是什么意思呢?
{0}
更改为{{{0}}}
来使其工作,但我有点困惑为什么花括号的层级数量会有影响。这是否是C++与C不同的一个方面? - R.. GitHub STOP HELPING ICEpthread_mutex_t
是一个拥有3个元素的联合体。也许您的编译器比较老,或者不支持某些g++扩展。 - iammilindlibstdc++
作为GCC/G++构建过程的一部分。它是与编译器(GCC 4.6.2)匹配的版本,因此C++11支持不是问题。问题在于它不喜欢我的系统定义的PTHREAD_MUTEX_INITIALIZER
。 - R.. GitHub STOP HELPING ICEPTHREAD_MUTEX_INITIALIZER
的定义不兼容C++。 - R.. GitHub STOP HELPING ICE