#c 11 #raspberry-pi #pthreads #clang #raspberry-pi3
#c 11 #raspberry-pi #pthreads #clang #raspberry-pi3
Вопрос:
У меня очень маленький скрипт, как показано ниже :
#include <iostream>
#include <thread>
int main()
{
std::thread th([]() {
std::cout << "Hello, World!" << std::endl;
});
th.join();
return 0;
}
Я компилирую его, как показано ниже :
clang -o demo demo.cpp -lpthread -std=c 11
Когда я выполняю свой двоичный файл после успешной компиляции, он выдает результат ниже :
на машине ubuntu linux :
Hello, World!
на моем rpi3 :
pure virtual method called
terminate called without an active exception
Aborted
моя версия clang на обоих :
на rpi3 :
Raspbian clang version 3.5.0-10 rpi1 (tags/RELEASE_350/final) (based on LLVM 3.5.0)
Target: arm-unknown-linux-gnueabihf
Thread model: posix
в linux :
clang version 3.8.1-24 rpi1 (tags/RELEASE_381/final)
Target: armv6--linux-gnueabihf
Thread model: posix
InstalledDir: /usr/bin
Как заставить это работать?
Комментарии:
1. Просто размышляю здесь, но между двумя компиляторами очень большой разрыв в номерах версий. Может быть ошибка в (старом) компиляторе RPi или стандартной библиотеке?
2. Да, я так и думал, но я обнаружил, что этот поток сталкивается с аналогичной проблемой, когда clang и std::thread не работают. [ссылка] raspberrypi.org/forums/viewtopic.php?t=131856
Ответ №1:
Это ошибка в Clang. См. Отчет об ошибке 23165. Это появляется даже в clang 3.7 с. -std=c 11
Согласно последнему комментарию к сообщению об ошибке, похоже, оно было исправлено в обновлении.
Проверено исправлено, с обновлением, которое я только что получил через канал llvm-toolchain-utopic для пакета clang-3.7. (версия пакета: 1: 3.7 ~ svn234704-1 ~ exp1)
Комментарии:
1. Да, я тоже это видел. В одном из моих pi3 у меня есть clang v3.8, где эта проблема решена. Но я не знаю, как обновить мою версию clang с 3.5 до 3.8
2. Если у вас возникли проблемы с обновлением, вы можете удалить существующую версию и установить новую версию
3. Учитывая, что clang 3.5 был выпущен более четырех лет назад (сентябрь 2014), вам, вероятно, следует выяснить, как его обновить. См releases.llvm.org для получения списка из 21 выпуска, вышедшего после даты 3.5