Ответ 1
Проблема была решена комментарием Джонатана Вакли.
Я добавил -pthread
в C/C++ Build -> Settings -> Tool Settings -> Cross G++ **Linker** -> Miscellaneous -> Other Flags
, и программа работала правильно.
Спасибо, Джонатан.
Я попытался проверить пример потоков С++ 11 в Eclipse. Но я получил это сообщение при запуске программы:
завершение вызова после вызова экземпляра 'std:: system_error' what(): операция не разрешена '
Моя система: ubuntu + gcc 4.7
Программа:
#include <iostream>
#include <thread>
void worker()
{
std::cout << "hello from worker" << std::endl;
}
int main(int argc, char **argv)
{
std::thread t(worker);
t.join();
}
... и да, я положил -std=c++11
и -pthread
внутрь C/C++ Build -> Settings -> Tool Settings -> Cross G++ Compiler -> Miscellaneous -> Other Flags
.
Любые комментарии?
Проблема была решена комментарием Джонатана Вакли.
Я добавил -pthread
в C/C++ Build -> Settings -> Tool Settings -> Cross G++ **Linker** -> Miscellaneous -> Other Flags
, и программа работала правильно.
Спасибо, Джонатан.
Перейдите в раздел Проект > Свойствa > Общие сведения о C/С++ > Препроцессор включает пути и т.д. > Поставщики > Параметры компилятора CDT GCC и добавьте -std=c++11
в спецификации компилятора.
Вы также можете сделать это для всех проектов, идущих в Окно > Настройки > C/С++ > Сборкa > Настройки > Обнаружение и добавьте -std=c++11
в настройки CDT GCC Встроенные параметры компиляторасильные > спецификации.
${COMMAND} ${FLAGS} -E -P -v -dD -std=c++11 "${INPUTS}"
Свойства проектa > C/С++ Build > Настройки > Настройки инструментa > Компилятор GCC С++ > Разное > Другие флаги, добавьте -pthread -std=c++11 -Wl,--no-as-needed
:
-c -fmessage-length=0 -pthread -std=c++11 -Wl,--no-as-needed
Свойства проектa > C/С++ Build > Настройки > Настройки инструментa > GCC С++ Linker > Разное > Флаги компоновщика, добавьте -pthread -std=c++11 -Wl,--no-as-needed
-pthread -std=c++11 -Wl,--no-as-needed
Чтобы работать с С++ 11 std::thread
в Eclipse, во время компиляции нужно указать параметр -pthread
. Однако , что недостаточно. В моем Ubuntu 14.04, с Eclipse Kepler и g++ 4.9 ниже, он работает:
-pthread
после -std=c++11
pthread
(что эквивалентно
в командной строке -lpthread
)Наконец, перекомпилируйте проект; ошибка должна идти.
Также помните, что если вы используете, std::thread
, то его объект должен быть join()
где-то. Кроме того, вы можете получить ниже ошибки времени выполнения:
завершение вызова без активного исключения