libfmt.so.9.1.0:对‘std::__throw_bad_array_new_length()@GLIBCXX_3.4.29’未定义的引用 的解决方法

首先可以确定,libfmt.so.9.1.0 是有GLIBCXX_3.4.29

查阅资料,可能是fmt.so.9.1.0的版本过高导致的,有兴趣的朋友可以降低版本试一试。

我的解决方法是,安装非模板类的Sophus 。

可以看到,报错的是fmt这个库文件,而模板类Sophus是依赖于这个库的,所以我选择安装不依赖fmt的非模板类的Sophus。

问题又来了,网上现有的安装非模板类的Sophus的方法是

git checkout a621ff 

加上这么一段代码,但是实际运行起来是报错的。查阅Sophus的git发现作者已经直接给出了安装非模板类的方法:

The fmt dependency can be eliminated by passing "-DUSE_BASIC_LOGGING=ON" to cmake when configuring Sophus.

 在cmake时加上 -DUSE_BASIC_LOGGING=ON ,OK 加上!

调试出错

????????????什么情况

然后我看了一下CmakeLists.txt  尼马判断条件是这个:

if(SOPHUS_USE_BASIC_LOGGING OR NOT TARGET fmt::fmt)
  # NOTE fmt_FOUND does not seem to be defined even though the package config
  # was found.
  target_compile_definitions(sophus INTERFACE SOPHUS_USE_BASIC_LOGGING=1)
  message(STATUS "Turning basic logging ON")
else()
  target_link_libraries(sophus INTERFACE fmt::fmt)
  set(fmt_DEPENDENCY "find_dependency (fmt ${fmt_VERSION})")
  message(STATUS "Turning basic logging OFF")
endif()

也就是说,需要加上的是:-DSOPHUS_USE_BASIC_LOGGING=ON ,

调试成功,make不报错了!!!!!!

作者大人,您更新一下git吧QAQ

  • 13
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
这个错误提示表明,/home/c3206-10/anaconda3/envs/new_py38/lib/python3.8/site-packages/matplotlib/_path.cpython-38-x86_64-linux-gnu.so 这个文件需要 GLIBCXX_3.4.29 版本的 libstdc++.so.6 库,但是当前系统中没有找到这个版本的库。 解决方法是安装包含 GLIBCXX_3.4.29 版本的 libstdc++.so.6 库。可以按以下步骤操作: 1. 确定当前系统中已经安装的 libstdc++.so.6 库的版本号,可以使用以下命令: ``` strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX ``` 2. 如果系统中已经安装了 GLIBCXX_3.4.29 版本的 libstdc++.so.6 库,可以将其软链接到 /lib/x86_64-linux-gnu/ 目录下,使用以下命令: ``` sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /lib/x86_64-linux-gnu/libstdc++.so.6 ``` 3. 如果系统中没有 GLIBCXX_3.4.29 版本的 libstdc++.so.6 库,可以下载安装包并手动安装。可以从 https://ftp.gnu.org/gnu/gcc/gcc-9.1.0/ 下载 gcc-9.1.0.tar.gz 压缩包,解压后进入 gcc-9.1.0 目录,使用以下命令编译并安装 libstdc++.so.6 库: ``` ./configure --prefix=/usr/local/gcc-9.1.0 --disable-multilib make sudo make install sudo ln -s /usr/local/gcc-9.1.0/lib64/libstdc++.so.6 /lib/x86_64-linux-gnu/libstdc++.so.6 ``` 第一条命令中的 --prefix=/usr/local/gcc-9.1.0 表示将编译后的文件安装到 /usr/local/gcc-9.1.0 目录下,--disable-multilib 表示不编译多种架构的库。编译过程可能需要一些时间,可以耐心等待。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值