Com a imagem baseada em jessie, funciona.
Ubuntu 14.04. Eu instalei o gcc-arm-linux-gnueabihf, g + + - arm-linux-gnueabihf (tentei 4.8 e 4.9 da utopic).
Código que usa std :: thread:
#include <iostream>
#include <chrono>
#include <future>
void secondList()
{
const std::chrono::seconds twoSeconds(2);
for (size_t i = 0; i != 300; ++i)
{
std::this_thread::sleep_for(twoSeconds);
std::cout << "2s\n";
}
}
int main(int, const char *[])
{
auto secondThr = std::async(std::launch::async, secondList);
return 0;
}
Compilando com:
arm-linux-gnueabihf-g++ --std=c++11 main.cpp -lpthread -o main
No RPI, ele falha:
pi@raspberrypi ~ $ ./main
pure virtual method called
terminate called without an active exception
Aborted
Compilando em trabalhos RPI:
pi@raspberrypi ~ $ g++ --std=c++0x main.cpp -lpthread -o main
Pi image 2015-02-16-raspbian-wheezy, g ++ em Pi (Debian 4.6.3-14 + rpi1) 4.6.3.
Eu tentei as opções de compilador -mcpu=cortex-a7
, -mcpu=cortex-a8
e -D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1,2,4,8}
que foram mencionadas em perguntas semelhantes.
Também tentei o g ++ do ppa: link preciso
Por que isso está acontecendo e como obter um compilador cruzado que funciona?
Com a imagem baseada em jessie, funciona.
Provavelmente pode ser corrigido adicionando -D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 -D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 -D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8
aos sinalizadores de linha de comando.
A causa raiz e a correção são descritas aqui: link