Ubuntu 14.04. Я установил gcc-arm-linux-gnueabihf, g ++ - arm-linux-gnueabihf (пробовал 4.8 и 4.9 из utopic).
Код, который использует 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;
}
Компиляция с:
arm-linux-gnueabihf-g++ --std=c++11 main.cpp -lpthread -o main
В RPI это не удается:
pi@raspberrypi ~ $ ./main
pure virtual method called
terminate called without an active exception
Aborted
Компиляция на RPI работает:
pi@raspberrypi ~ $ g++ --std=c++0x main.cpp -lpthread -o main
Pi image 2015- 02-16-raspbian-wheezy, g ++ на Pi (Debian 4.6.3-14 + rpi1) 4.6.3.
Я пробовал параметры компилятора -mcpu=cortex-a7, -mcpu=cortex-a8 и -D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1,2,4,8}, которые были упомянуты в похожих вопросах.
Также попытался g ++ из ppa: http://ppa.launchpad.net/linaro-maintainers/toolchain/ubuntu exact
Почему это происходит и как получить кросс-компилятор, который работает?
Добавьте это в командную строку для ссылки,
-Wl,--whole-archive -lpthread -Wl,--no-whole-archive
См. это сообщение для объяснений, https://gcc.gnu.org/ml/gcc-help /2010-05/msg00029.html Это проблема TLS, но, возможно, это связанные неполные символы, связанные с static libpthread.
Возможно, это может быть исправлено добавлением -D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 -D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 -D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 к флагам командной строки.
Ниже описаны основные причины и исправления: https://raspberrypi.stackexchange.com/questions/48225/whats -causing-эти-аварии-после-кросскомпилируете