Raspberry Pi C ++ 11 std :: thread: método virtual puro chamado

2

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?

    
por Velkan 22.04.2015 / 14:39

3 respostas

-1

Com a imagem baseada em jessie, funciona.

    
por Velkan 23.08.2015 / 23:26
-1

Adicione isso à linha de comando para vincular

-Wl,--whole-archive -lpthread -Wl,--no-whole-archive

Veja esta mensagem para explicações, link Ele disse ser um problema de TLS, mas talvez esteja relacionado a símbolos incompletos ligados a% static libpthread .

    
por albert 22.10.2015 / 05:26
-1

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

    
por Jeremy Barnes 11.09.2016 / 04:21