【发布时间】:2015-09-15 03:29:30
【问题描述】:
我正在尝试在我的应用程序中使用std::future::wait_for(std::chrono::duration)(事实上,我根本不想等待,这会让这更加令人沮丧,正如您将看到的那样),但是在使用来自std::chrono 的任何东西时,在为我的 BeagleBone Black 交叉编译后,我无法运行该应用程序:
/usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version `GLIBCXX_3.4.19' not found
在我将以下几行添加到我的代码之前,这个项目可以在旧版本的 GLIBCXX 上编译并运行良好,但是为了能够检查未来的值是否已准备好而不会阻塞,我突然需要所有这些较新的库:
if (myFuture.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
return true;
BeagleBone Black 带有来自 GCC 4.6.3 的 GLIBCXX_3.4.17 - 我已经检查了系统上的 C++ 头文件,并且正如我所怀疑的,我需要从 chrono 库中获得的所有功能都在那里。那么为什么它要求版本 3.4.19?
我尝试使用sudo apt-get upgrade 更新和升级 Debian,希望能够添加更新的库。这没有效果。此外,我真的希望能够在股票图像上运行。
所以我尝试静态链接 libstdc++ 和 -static-libstdc++ 添加到我的 LD 标志。现在我显然错过了GLIBC-2.7,它无法以与-static-libgcc 相同的方式修复
我没有想法。
【问题讨论】:
-
也许尝试使用编译器标志
-D _GLIBCXX_USE_CXX11_ABI=0来选择前GCC 5ABI? (GCC 5 引入了一个新的“可切换”二进制接口)。 -
我按照您的建议尝试了编译器标志,但没有效果。
标签: c++ c++11 gcc cross-compiling dynamic-linking