2012-10-18 43 views
11

Tôi chỉ đang thử một vài tính năng C++ 11 mới với GCC 4.7.2, mặc dù khi tôi chạy một lỗi seg xảy ra.C++ 11 Lỗi async seg

$ ./a.out 
Message from main. 
terminate called after throwing an instance of 'std::system_error' 
    what(): Unknown error -1 
Aborted (core dumped) 

tôi biên soạn với 'beta' tính năng của GCC, liên quan đến C++ 0x với:

g++ -std=c++11 c11.cpp 

Mã:

#include <future> 
#include <iostream> 

void called_from_async() { 
    std::cout << "Async call" << std::endl; 
} 

int main() { 
    //called_from_async launched in a separate thread if possible 
    std::future<void> result(std::async(called_from_async)); 

    std::cout << "Message from main." << std::endl; 

    //ensure that called_from_async is launched synchronously 
    //if it wasn't already launched 
    result.get(); 

    return 0; 
} 

Trả lời

22

Tôi tin rằng điều này xảy ra bởi vì bạn đã quên liên kết với thư viện chủ đề POSIX. Chỉ cần thêm -pthread hoặc -lpthread vào cờ g++ và sự cố sẽ biến mất.

Nếu bạn quan tâm đến chi tiết, điều này xảy ra vì thời gian chạy C++ 11 giải quyết các biểu tượng từ pthread chỉ trong thời gian chạy nếu bạn tình cờ sử dụng các tính năng đó. Vì vậy, nếu bạn quên liên kết, thời gian chạy sẽ không thể giải quyết những biểu tượng đó, xử lý môi trường của bạn như thể nó không hỗ trợ chủ đề, và ném ngoại lệ (mà bạn không nắm bắt và nó hủy bỏ ứng dụng của bạn).

+0

+1. Cảm ơn bạn rất nhiều! – TheBlueCat

+2

FWIW, bổ sung thêm một lần nữa không làm việc, nhưng -pthread đã làm. –