В последнее время я обновил свою ОС до Xubuntu 13.10. Теперь любой компилятор C ++, использующий компилятор GNU 4.8.1, падает с:
terminate called after throwing an instance of 'std::system_error'
what(): Unknown error -1
Aborted (core dumped)
Я удалил что-нибудь из источника и использую только пустую основную функцию:
#if defined(linux) || defined(__linux)
int main()
{
return 0;
}
#endif
Отказ существует. Я попробовал Xubuntu 13.10 32-битную и 64-битную версию. Отказ существуют на обоих.
GDB сообщает:
Program received signal SIGABRT, Aborted.
0x00007ffff6c33f77 in __GI_raise (sig=sig@entry=6)
at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
Редактировать:
Тем временем я понял, что проблема основана на моей реализации синглтона. Эта реализация успешно работает с MinGW-64 в рукопожатии с GCC 4.8 и с Xubuntu 13.04:
namespace binrev{
namespace brCore{
template <typename T>
class DLL_EXPORT brSingleton
{
public:
static T& getInstance()
{
std::call_once(m_once, safe_create);
return *m_instance;
}
protected:
brSingleton(const std::string& name)
: m_name(name)
{}
static void safe_create() {
brSingleton::m_instance.reset(new T());
}
brSingleton(const brSingleton& rs) = delete;
brSingleton& operator = (const brSingleton& rs) = delete;
virtual ~brSingleton(){}
protected:
static std::unique_ptr<T> m_instance;
static std::once_flag m_once;
std::string m_name;
};
template<typename T>
std::once_flag brSingleton<T>::m_once;
}// ns-brCore
}// ns-binrev
Если я вызываю getInstance в конкретной одноэлементной реализации, происходит сбой при вызове функции std :: call_once.
У меня заканчиваются идеи. Кто-нибудь знает, что происходит не так?
Благодарю.
Проблема решена после установки xubuntu 13.10 64bit в четвертый раз. Я думаю, что было некоторое повреждение упаковки, как упомянуто syam во время установки.
Других решений пока нет …