C ++ 11 เธรด ข้อผิดพลาดที่เรียกว่าฟังก์ชันเสมือน Pure

นี่คือโค้ด C++11 Thread API ขั้นต่ำที่ฉันพยายามคอมไพล์

#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
ฉันได้รับข้อผิดพลาดต่อไปนี้
วิธีการเสมือนบริสุทธิ์ที่เรียกว่า
terminate เรียกว่าโดยไม่มีข้อยกเว้นที่ใช้งานอยู่
ถูกยกเลิก


มีอะไรผิดปกติ ใครสามารถช่วยได้
โปรดทราบว่าฉันกำลังรวบรวมสิ่งนี้บน Beaglebone Black ด้วยโปรเซสเซอร์ ARM A8


person Anjanu    schedule 10.05.2014    source แหล่งที่มา
comment
ขออภัย รหัสของคุณทำงานได้ดีใน VS2012 โดยมีการตั้งค่าคอมไพเลอร์เริ่มต้น ดังนั้นรหัสจึงไม่ใช่ปัญหา   -  person Valdrinium    schedule 10.05.2014
comment
ระบบปฏิบัติการและคอมไพเลอร์เวอร์ชันของคุณคืออะไร?   -  person Massa    schedule 10.05.2014
comment
บางทีคุณกำลังรวบรวมคำสั่งผิด? มันเป็นเรื่องแปลก. ฉันได้ลองที่นี่แล้ว (compileonline.com/compile_cpp11_online.php) และได้ผล (คอมไพล์ cmd g++ -std=c++11 main.cpp -o demo -lm -pthread -lgmpxx -lgmp -lreadline 2›&1)   -  person Iosif Murariu    schedule 10.05.2014
comment
นี่คือบน Beaglebone Black ซึ่งรัน Angstrom Linux นอกจากนี้ฉันกำลังใช้ผงสำหรับอุดรูเพื่อ ssh ลงในบีเกิ้ลโบนของฉันผ่าน usb   -  person Anjanu    schedule 10.05.2014
comment
losif Marariu ลองใช้คำสั่งคอมไพล์ของคุณ มีข้อผิดพลาดเดียวกัน   -  person Anjanu    schedule 10.05.2014
comment
การทำซ้ำที่เป็นไปได้ stackoverflow.com/questions/16171401/   -  person tofi9    schedule 10.05.2014
comment
นอกจากนี้ยังทำงานได้ดีกับ GNU C++ 4.7.2 บน Linux Debian ของฉัน (amd64)   -  person nickie    schedule 10.05.2014
comment
@Scooby นั่นไม่ใช่วิธีการทำงานของพฤติกรรมที่ไม่ได้กำหนด (ไม่สามารถตัดสินใจได้และทั้งหมด) แต่ในกรณีนี้โค้ดก็เป็นที่ยอมรับอย่างสมบูรณ์จริงๆ ฉันพบปัญหาอื่นกับ g++ 4.8.1 ซึ่งอธิบายไว้ ที่นี่.   -  person Voo    schedule 10.05.2014
comment
ไลบรารี stl ของคุณคืออะไร?   -  person Ran Regev    schedule 11.05.2014


คำตอบ (3)


นี่เป็นจุดบกพร่องใน 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&revision=191707

ฉันไม่ทราบว่าก่อนหน้านี้เคยเป็นข้อบกพร่องในไดรเวอร์ GCC หรือไม่ และ/หรือได้รับการแก้ไขแล้วหรือไม่

person Quuxplusone    schedule 11.05.2014

พบปัญหาเดียวกันกับ Raspberry Pi 2 Model B ที่มี ARM Cortex-A7 คอมไพล์ด้วย g++-4.7 ปรากฏว่าผู้ร้ายคือแฟล็กคอมไพเลอร์:

-march=armv7-a
person Tim    schedule 19.06.2016

แม้ว่าเสียงดังกราวจะมีปัญหาที่เกี่ยวข้อง แต่นี่เป็นข้อบกพร่องของ gcc ทั้งหมดซึ่งขณะนี้บันทึกไว้ที่: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62100

person pabigot    schedule 12.08.2014
comment
และอันที่จริงมันเป็นข้อผิดพลาดของ OpenEmbedded วิธีแก้ปัญหาชั่วคราวที่ดีกว่าจนกว่าจะได้รับการแก้ไขคือการใช้ -mcpu=cortex-a8 ดูบริบทที่ OE Core thread - person pabigot; 14.08.2014