Вот очень минимальный код API C ++ 11 Thread, который я пытаюсь скомпилировать
#include<iostream>
#include<thread>
using namespace std;
void threadFunction(void)
{
cout<<"hello from thread:";//<<this_thread::get_id()<<endl;
}
int main()
{
std::thread t(threadFunction);
t.join();
return 0;
}
При компиляции это как
g ++ thread1.cpp -pthread -std = c ++ 11
Я получаю следующую ошибку
чисто виртуальный метод называется
завершить вызов без активного исключения
Отменено
Что не так, может кто-нибудь, пожалуйста, помогите
Обратите внимание, что я собираю это на Beaglebone Black с процессором ARM A8
Это ошибка в libstdc ++ или Clang, в зависимости от того, кого вы спрашиваете. Он должен работать, если вы используете версию Clang, выпущенную после октября 2013 года. Что вы видите, когда запускаете g++ --version
?
В качестве обходного пути вы можете попробовать использовать эту командную строку вместо этого. Я не гарантирую, что это сработает; пожалуйста, оставьте комментарий с вашими результатами.
g++ -pthread -std=c++11 -D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1,2,4} thread1.cpp
Вот отчет об ошибке:
http://llvm.org/bugs/show_bug.cgi?id=12730
И вот официальное исправление для драйвера Clang:
https://llvm.org/viewvc/llvm-project?view=revision&Пересмотр = 191707
Я не знаю, была ли это ранее также ошибка в драйвере GCC, и / или была ли она исправлена.
Столкнулся с той же проблемой на Raspberry Pi 2 Model B с ARM Cortex-A7.
Скомпилированный с g ++ — 4.7, оказалось, что виновником был флаг компилятора:
-march=armv7-a
Несмотря на то, что clang имел связанную проблему, это полностью ошибка gcc, теперь записанная в: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62100