Ошибки кросс-компиляции с std :: async - PullRequest
0 голосов
/ 16 ноября 2018

Фон

  1. Я собрал набор инструментов для моего ARMv7 Raspberry Pi, используя crosstool-ng на моем Ubuntu 18.04. Из-за проблемы с компиляцией GCC 7.1 GCC 6.3.0 я сделал некоторые изменения в файле ubsan.c.
  2. Я собрал необходимые библиотеки на самом Raspberry Pi, использовал утилиту symlink для изменения символических ссылок с абсолютных на относительные, сжал каталоги / usr и / lib для переноса и установил их в мой рабочий каталог sysroot .
  3. Показано, что этот набор инструментов работает для ряда крупных проектов.

Проблема

Я создал простое приложение, используя библиотеку paho.mqtt.cpp . Это приложение использует стандарт C ++ 11, как того требует библиотека. Приложение компилируется и выполняется при компиляции на моей машине для разработки, а также при компиляции на Raspberry Pi. Однако, когда я использую вышеупомянутый набор инструментов, я получаю ошибку, связанную с использованием библиотекой std :: async.

In file included from /home/hicklin/CLionProjects/mqttTest/main.cpp:7:0:
/opt/pi/sysroot/usr/local/include/mqtt/client.h: In member function 'virtual void mqtt::client::connected(const string&)':
/opt/pi/sysroot/usr/local/include/mqtt/client.h:71:76: error: invalid use of incomplete type 'class std::future<void>'
   std::async(std::launch::async, &callback::connected, userCallback_, cause);
                                                                            ^
In file included from /opt/pi/sysroot/usr/local/include/mqtt/client.h:28:0,
                 from /home/hicklin/CLionProjects/mqttTest/main.cpp:7:
/opt/pi/x-tools/arm-unknown-linux-gnueabihf/arm-unknown-linux-gnueabihf/include/c++/6.3.1/future:115:11: note: declaration of 'class std::future<void>'
     class future;
           ^~~~~~

Попытки исправить

  1. Я попытался использовать флаг -nostdinc, чтобы компилятор не использовал стандартные заголовки и не использовал их в sysroot. Ошибка сохранилась.
  2. Я попытался заменить файл future, указанный в ошибке, файлом, установленным в Pi (он имеет очень незначительную разницу). Ошибка сохранилась.

Мой вопрос

Кто-нибудь сможет указать причину этой ошибки и возможные вещи, которые нужно изучить? Стоит ли пытаться перестроить цепочку инструментов по-другому или, возможно, мне не хватает некоторых флагов?

...