std :: async的交叉编译错误

时间:2018-11-16 12:47:56

标签: c++ arm cross-compiling stdasync

背景

  1. 我在Ubuntu 18.04上使用crosstool-ng为我的ARMv7 Raspberry Pi构建了一个工具链。由于problem with GCC 7.1 compilation of GCC 6.3.0,我对ubsan.c文件做了一些修改。
  2. 我在Raspberry Pi本身上构建了所​​需的库,使用symlink utility将符号链接从绝对更改为相对,将/ usr和/ lib目录压缩以进行传输并将它们安装在我的工作sysroot目录中。
  3. li>
  4. 该工具链已被证明可用于许多大型项目。

问题

我使用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. 我尝试用Pi中安装的文件替换错误中提到的future文件(只有很小的不同)。错误仍然存​​在。

我的问题

任何人都可以指出此错误的原因以及可能要研究的内容吗?我应该尝试以不同的方式重建工具链,还是丢失一些标志?

0 个答案:

没有答案