gpt4 book ai didi

c++ - 无法将 std::chrono 与 std::future 一起使用 - GLIBCXX_3.4.19 未找到

转载 作者:行者123 更新时间:2023-11-30 03:49:24 25 4
gpt4 key购买 nike

我正在尝试在我的应用程序中使用 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 上编译和运行良好,但只是为了能够检查 future 的值(value)是否准备好而不会阻塞,我突然需要所有这些更新的库:

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

以同样的方式修复

我没有想法。

最佳答案

按照 another answer 中的步骤,我能够使用需要 3.4.19 的函数的先前版本进行编译。 .

首先,我检查了 3.4.19 需要什么:

$ objdump -T myapp | grep "GLIBCXX_3.4.19"
00000000 DF *UND* 00000000 GLIBCXX_3.4.19 _ZNSt6chrono3_V212system_clock3nowEv

然后我在我的库中搜索了相同的符号

$ objdump -T /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 | grep "_ZNSt6chrono3_V212system_clock3nowEv"

但这没有返回任何结果。凭直觉,我试着只找到“chrono”

$ objdump -T /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 | grep "chrono"
00080828 g DF .text 0000002a GLIBCXX_3.4.11 _ZNSt6chrono12system_clock3nowEv
0008ae38 g DO .rodata 00000001 GLIBCXX_3.4.11 _ZNSt6chrono12system_clock12is_monotonicE

宾果游戏。虽然不是完全匹配,但对我来说已经足够好了。我在我的源文件中添加了一个汇编指令来更新所请求符号的链接。

__asm__(".symver _ZNSt6chrono3_V212system_clock3nowEv,_ZNSt6chrono12system_clock3nowEv@GLIBCXX_3.4.11");

虽然它现在可以编译和运行,但我不能肯定地说这个替代有效,因为我还有其他障碍需要解决,但我认为我可以安全地说这是一个解决方案。

关于c++ - 无法将 std::chrono 与 std::future 一起使用 - GLIBCXX_3.4.19 未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32577224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com