Фон
- Я собрал набор инструментов для моего ARMv7 Raspberry Pi, используя crosstool-ng на моем Ubuntu 18.04. Из-за проблемы с компиляцией GCC 7.1 GCC 6.3.0 я сделал некоторые изменения в файле ubsan.c.
- Я собрал необходимые библиотеки на самом Raspberry Pi, использовал утилиту symlink для изменения символических ссылок с абсолютных на относительные, сжал каталоги / usr и / lib для переноса и установил их в мой рабочий каталог sysroot .
- Показано, что этот набор инструментов работает для ряда крупных проектов.
Проблема
Я создал простое приложение, используя библиотеку 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;
^~~~~~
Попытки исправить
- Я попытался использовать флаг -nostdinc, чтобы компилятор не использовал стандартные заголовки и не использовал их в sysroot. Ошибка сохранилась.
- Я попытался заменить файл
future
, указанный в ошибке, файлом, установленным в Pi (он имеет очень незначительную разницу). Ошибка сохранилась.
Мой вопрос
Кто-нибудь сможет указать причину этой ошибки и возможные вещи, которые нужно изучить? Стоит ли пытаться перестроить цепочку инструментов по-другому или, возможно, мне не хватает некоторых флагов?