C++ 11 Utas, Kesalahan Fungsi virtual murni dipanggil

berikut adalah kode API C++11 Thread yang sangat minimal yang saya coba kompilasi

#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;
}



Saat Mengkompilasi ini sebagai
g++ thread1.cpp -pthread -std=c++11
Saya mendapatkan kesalahan berikut
metode virtual murni yang disebut
terminate dipanggil tanpa pengecualian aktif
Dibatalkan


Apa yang salah, bisakah seseorang tolong bantu
Perhatikan bahwa saya mengkompilasi ini di Beaglebone Black dengan prosesor ARM A8


person Anjanu    schedule 10.05.2014    source sumber
comment
Maaf, kode Anda berfungsi dengan baik di VS2012, dengan pengaturan kompiler default. Jadi kodenya bukan masalahnya.   -  person Valdrinium    schedule 10.05.2014
comment
Apa versi OS dan kompiler Anda?   -  person Massa    schedule 10.05.2014
comment
Mungkin perintah kompilasi Anda salah? Itu aneh. Saya sudah mencobanya di sini (compileonline.com/compile_cpp11_online.php) dan berhasil. (kompilasi cmd g++ -std=c++11 main.cpp -o demo -lm -pthread -lgmpxx -lgmp -lreadline 2›&1)   -  person Iosif Murariu    schedule 10.05.2014
comment
Ini ada di Beaglebone Black, yang menjalankan Angstrom Linux. Saya juga menggunakan Putty untuk ssh ke beaglebone saya melalui usb   -  person Anjanu    schedule 10.05.2014
comment
losif Marariu mencoba perintah kompilasi Anda, kesalahan yang sama   -  person Anjanu    schedule 10.05.2014
comment
Kemungkinan duplikasi stackoverflow.com/questions/16171401/   -  person tofi9    schedule 10.05.2014
comment
Ini juga berfungsi dengan baik dengan GNU C++ 4.7.2 di Linux Debian saya (amd64).   -  person nickie    schedule 10.05.2014
comment
@Scooby Bukan itu cara kerja perilaku tidak terdefinisi (keragu-raguan dan sebagainya). Namun dalam kasus khusus ini, kode tersebut benar-benar dapat diterima. Saya mengalami masalah berbeda dengan g++ 4.8.1 yang dijelaskan di sini.   -  person Voo    schedule 10.05.2014
comment
apa perpustakaan stlmu?   -  person Ran Regev    schedule 11.05.2014


Jawaban (3)


Ini adalah bug di libstdc++ atau Clang, tergantung pada siapa Anda bertanya. Ini akan berfungsi jika Anda menggunakan versi Dentang yang dirilis setelah Oktober 2013. Apa yang Anda lihat saat menjalankan g++ --version?

Sebagai solusinya, Anda dapat mencoba menggunakan baris perintah ini. Saya tidak menjamin ini akan berhasil; silakan kirim komentar dengan hasil Anda.

g++ -pthread -std=c++11 -D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1,2,4} thread1.cpp

Berikut laporan bugnya:

http://llvm.org/bugs/show_bug.cgi?id=12730

Dan inilah perbaikan resmi pada driver Clang:

https://llvm.org/viewvc/llvm-project?view=revision&revision=191707

Saya tidak tahu apakah ini sebelumnya juga merupakan bug pada driver GCC, dan/atau apakah sudah diperbaiki.

person Quuxplusone    schedule 11.05.2014

Mengalami masalah yang sama pada Raspberry Pi 2 Model B dengan ARM Cortex-A7. Dikompilasi dengan g++-4.7, ternyata pelakunya adalah flag compiler:

-march=armv7-a
person Tim    schedule 19.06.2016

Meskipun clang mempunyai masalah terkait, ini sepenuhnya merupakan bug gcc yang sekarang dicatat di: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62100

person pabigot    schedule 12.08.2014
comment
Dan sebenarnya itu adalah bug OpenEmbedded. Solusi yang lebih baik hingga masalah ini diperbaiki adalah dengan menggunakan -mcpu=cortex-a8. Lihat utas Inti OE untuk mengetahui konteksnya. - person pabigot; 14.08.2014