在jeston中运行代码遇到以下问题:

/lib/aarch64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29’ not found (required by /home/nvidia/.conda/envs/pytorch/lib/python3.8/site-packages/scipy/spatial/_ckdtree.cpython-38-aarch64-linux-gnu.so)

系统中安装的 libstdc++.so.6 库版本过旧,不满足 scipy 库中某个组件(这里是 _ckdtree.cpython-38-aarch64-linux-gnu.so)所需的 GLIBCXX_3.4.29 版本。这通常发生在使用了较新版本的编译器编译的 Python 库,但是系统上的 C++ 标准库版本较旧的情况下

try—01: (no)
sudo apt install gcc g++-9
try-02: (ok)

参考arm-linux下搞定/usr/lib/aarch64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26‘ not found (required)

1. strings / 错误信息中的路径 /libstdc++.so.6 | grep GLIBCXX
# my
strings  /lib/aarch64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

路径按实际的填写,看错误信息。然后会出现一大堆东西,查看是否有 GLIBCXX_3.4.29

要检查/lib/aarch64-linux-gnu/libstdc++.so.6库中支持的GLIBCXX版本,可以使用strings命令配合grep来搜索与GLIBCXX相关的字符串。具体命令如下:

strings /lib/aarch64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

这个命令的工作原理是:

  1. strings命令用于提取给定文件中的可打印字符串。
  2. 管道符|strings命令的输出传递给grep命令。
  3. grep GLIBCXX命令搜索包含GLIBCXX的字符串。

执行这个命令后,你应该会看到类似下面的输出,这些输出显示了该库支持的GLIBCXX版本号:

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
...
GLIBCXX_3.4.XX

这些版本号表示该库兼容的GCC ABI(Application Binary Interface)版本。每个版本号对应GCC的一个特定版本或更新,这些更新可能包含了新的C++标准库特性或修复。

我的查找:

(pytorch) nvidia@nvidia:~/Downloads$  strings  /lib/aarch64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_DEBUG_MESSAGE_LENGTH
(env_name) nvidia@nvidia-desk
2.全系统搜索,会找到很多,找到你认为正确的,再次重复步骤1,直到出现 GLIBCXX_3.4.26,我的是 /usr/local/gcc-10.2/lib64/libstdc++.so.6
sudo find / -name 

这条命令的作用是在整个系统中搜索名为libstdc++.so.6及其相关版本(例如libstdc++.so.6.0.28等)的文件。下面是对这个命令的详细解释:

  • sudo:这是一个命令行程序,允许授权的用户以另一个用户的安全权限(通常是超级用户或root)来运行命令。在这个上下文中,它用来确保有足够的权限去搜索系统的所有部分,包括那些普通用户无法访问的部分。

  • find:这是一个在Linux和Unix系统中用来搜索文件和目录的命令。它可以根据名称、大小、类型、修改时间等条件来查找文件或目录。

  • /:这个斜杠代表根目录,是Linux和Unix系统中所有文件和目录的起点。在这个命令中,它意味着搜索将从系统的最顶层开始,覆盖整个文件系统。

  • -name:这是find命令的一个选项,用来指定搜索时要匹配的文件名模式。

  • "libstdc++.so.6"*:这是-name选项的参数,指定了要搜索的文件名模式。libstdc++.so.6是GCC(GNU Compiler Collection)提供的标准C++库的一个共享对象文件,用于运行使用C++编译的程序。在文件名后面的*是一个通配符,表示匹配libstdc++.so.6后面跟随任意字符的文件名,这样就可以找到该库的所有版本,比如libstdc++.so.6.0.28

综上所述,这条命令的目的是在整个系统中查找所有名为libstdc++.so.6及其各种版本的共享对象文件。这通常用于解决关于C++库版本兼容性的问题,或者在系统中定位特定版本的库文件。

搜索结果:

(pytorch) nvidia@nvidia:~/Downloads$ sudo find / -name "libstdc++.so.6"*
[sudo] nvidia 的密码: 
find: ‘/proc/39950/task/39950/net’: 无效的参数
find: ‘/proc/39950/net’: 无效的参数
find: ‘/proc/2734196’: 没有那个文件或目录
find: ‘/proc/2734198’: 没有那个文件或目录
find: ‘/run/user/1000/doc’: 权限不够
find: ‘/run/user/1000/gvfs’: 权限不够
find: ‘/run/user/124/gvfs’: 权限不够
/root/miniconda3/pkgs/libstdcxx-ng-11.2.0-h1234567_1/lib/libstdc++.so.6
/root/miniconda3/pkgs/libstdcxx-ng-11.2.0-h1234567_1/lib/libstdc++.so.6.0.29
/root/miniconda3/lib/libstdc++.so.6
/root/miniconda3/lib/libstdc++.so.6.0.29
/home/nvidia/miniconda3/pkgs/libstdcxx-ng-11.2.0-h1234567_1/lib/libstdc++.so.6
/home/nvidia/miniconda3/pkgs/libstdcxx-ng-11.2.0-h1234567_1/lib/libstdc++.so.6.0.29
/home/nvidia/miniconda3/lib/libstdc++.so.6
/home/nvidia/miniconda3/lib/libstdc++.so.6.0.29
/home/nvidia/.conda/pkgs/libstdcxx-ng-14.1.0-h3f4de04_0/lib/libstdc++.so.6
/home/nvidia/.conda/pkgs/libstdcxx-ng-14.1.0-h3f4de04_0/lib/libstdc++.so.6.0.33
/home/nvidia/.conda/pkgs/libstdcxx-14.1.0-h3f4de04_1/lib/libstdc++.so.6
/home/nvidia/.conda/pkgs/libstdcxx-14.1.0-h3f4de04_1/lib/libstdc++.so.6.0.33
/home/nvidia/.conda/envs/env_name/lib/libstdc++.so.6
/home/nvidia/.conda/envs/env_name/lib/libstdc++.so.6.0.33
/home/nvidia/.conda/envs/bisenet/lib/libstdc++.so.6
/home/nvidia/.conda/envs/bisenet/lib/libstdc++.so.6.0.33
/home/nvidia/.conda/envs/new/lib/libstdc++.so.6
/home/nvidia/.conda/envs/new/lib/libstdc++.so.6.0.33
/home/nvidia/.conda/envs/py39/lib/libstdc++.so.6
/home/nvidia/.conda/envs/py39/lib/libstdc++.so.6.0.33
/home/nvidia/.conda/envs/cameral/lib/libstdc++.so.6
/home/nvidia/.conda/envs/cameral/lib/libstdc++.so.6.0.33
/opt/nvidia/nsight-systems/2022.5.2/host-linux-armv8/libstdc++.so.6
/usr/lib/aarch64-linux-gnu/libstdc++.so.6
/usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.28
/usr/share/gdb/auto-load/usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.28-gdb.py

尝试换路径,这么多库,看看哪个库支持GLIBCXX_3.4.29

 # no
 strings /usr/lib/aarch64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
 # no
 strings /usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.28 | grep GLIBCXX
# no 
 strings /opt/nvidia/nsight-systems/2022.5.2/host-linux-armv8/libstdc++.so.6 | grep GLIBCXX
# ok
 strings  /home/nvidia/.conda/envs/cameral/lib/libstdc++.so.6| grep GLIBCXX

查询结果 ,是支持的

(pytorch) nvidia@nvidia-desktop:~/Downloads$  strings  /home/nvidia/.conda/envs/cameral/lib/libstdc++.so.6| grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_3.4.29
GLIBCXX_3.4.30
GLIBCXX_3.4.31
GLIBCXX_3.4.32
GLIBCXX_3.4.33
GLIBCXX_TUNABLES
GLIBCXX_DEBUG_MESSAGE_LENGTH
_ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4
_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv@@GLIBCXX_3.4.5
_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@GLIBCXX_3.4
_ZNKSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv@@GLIBCXX_3.4.5
GLIBCXX_3.4.21
GLIBCXX_3.4.9
_ZSt10adopt_lock@@GLIBCXX_3.4.11
GLIBCXX_3.4.10
GLIBCXX_3.4.16
GLIBCXX_3.4.32
GLIBCXX_3.4.1
_ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv@GLIBCXX_3.4
GLIBCXX_3.4.28
_ZNSs7_M_copyEPcPKcm@GLIBCXX_3.4
GLIBCXX_3.4.25
_ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv@@GLIBCXX_3.4.5
_ZNSs7_M_moveEPcPKcm@@GLIBCXX_3.4.5
_ZNKSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4
_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4
_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEm@@GLIBCXX_3.4.5
_ZNSs4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4
_ZSt10defer_lock@@GLIBCXX_3.4.11
_ZN10__gnu_norm15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4
_ZNSs9_M_assignEPcmc@@GLIBCXX_3.4.5
_ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEmmPKc@@GLIBCXX_3.4.5
_ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv@@GLIBCXX_3.4.5
_ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwm@GLIBCXX_3.4
GLIBCXX_3.4.24
_ZNVSt9__atomic011atomic_flag12test_and_setESt12memory_order@@GLIBCXX_3.4.11
GLIBCXX_3.4.20
_ZNSt11char_traitsIwE2eqERKwS2_@@GLIBCXX_3.4.5
GLIBCXX_3.4.12
_ZNSi6ignoreEv@@GLIBCXX_3.4.5
GLIBCXX_3.4.2
_ZNSt11char_traitsIcE2eqERKcS2_@@GLIBCXX_3.4.5
GLIBCXX_3.4.6
_ZNSt18condition_variable4waitERSt11unique_lockISt5mutexE@GLIBCXX_3.4.11
GLIBCXX_3.4.15
GLIBCXX_3.4.31
_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv@@GLIBCXX_3.4.5
_ZNSs9_M_assignEPcmc@GLIBCXX_3.4
GLIBCXX_3.4.19
_ZNKSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4
_ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv@GLIBCXX_3.4
GLIBCXX_3.4.27
_ZN10__gnu_norm15_List_node_base7reverseEv@@GLIBCXX_3.4
_ZN10__gnu_norm15_List_node_base4hookEPS0_@@GLIBCXX_3.4
_ZNSt11char_traitsIwE2eqERKwS2_@GLIBCXX_3.4
_ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwm@GLIBCXX_3.4
_ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwm@@GLIBCXX_3.4.5
GLIBCXX_3.4.23
GLIBCXX_3.4.3
GLIBCXX_3.4.7
_ZNSi6ignoreEl@@GLIBCXX_3.4.5
_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@@GLIBCXX_3.4.5
_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv@GLIBCXX_3.4
_ZNKSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv@@GLIBCXX_3.4.5
_ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwm@@GLIBCXX_3.4.5
GLIBCXX_3.4.18
_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4
GLIBCXX_3.4.30
_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEl@@GLIBCXX_3.4.5
_ZSt15future_category@@GLIBCXX_3.4.14
_ZNSi6ignoreEl@GLIBCXX_3.4
GLIBCXX_3.4.29
_ZNSt11char_traitsIcE2eqERKcS2_@GLIBCXX_3.4
_ZNKSs15_M_check_lengthEmmPKc@GLIBCXX_3.4
_ZN10__gnu_norm15_List_node_base8transferEPS0_S1_@@GLIBCXX_3.4
_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@GLIBCXX_3.4
_ZNVSt9__atomic011atomic_flag5clearESt12memory_order@@GLIBCXX_3.4.11
_ZNKSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv@@GLIBCXX_3.4.5
_ZNKSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4
_ZNSs7_M_moveEPcPKcm@GLIBCXX_3.4
_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEl@GLIBCXX_3.4
_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@@GLIBCXX_3.4.5
_ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEmmPKc@GLIBCXX_3.4
_ZNKSs11_M_disjunctEPKc@@GLIBCXX_3.4.5
_ZN10__gnu_norm15_List_node_base6unhookEv@@GLIBCXX_3.4
GLIBCXX_3.4.22
_ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv@@GLIBCXX_3.4.5
_ZNSi6ignoreEv@GLIBCXX_3.4
_ZNSs7_M_copyEPcPKcm@@GLIBCXX_3.4.5
GLIBCXX_3.4.8
GLIBCXX_3.4.13
_ZSt11try_to_lock@@GLIBCXX_3.4.11
_ZNKSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv@@GLIBCXX_3.4.5
GLIBCXX_3.4.17
GLIBCXX_3.4.4
GLIBCXX_3.4.33
_ZNKSs15_M_check_lengthEmmPKc@@GLIBCXX_3.4.5
_ZNKSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4
_ZNSs4_Rep26_M_set_length_and_sharableEm@@GLIBCXX_3.4.5
GLIBCXX_3.4.26
_ZNKSs11_M_disjunctEPKc@GLIBCXX_3.4

3. 拷贝找到的文件(libstdc++.so.6.0.28)到报错的路径 /usr/lib/aarch64-linux-gnu/

# 参考 
sudo cp /usr/local/gcc-10.2/lib64/libstdc++.so.6.0.28 /usr/lib/aarch64-linux-gnu/

# 我的
sudo cp  /home/nvidia/.conda/envs/cameral/lib/libstdc++.so.6 /usr/lib/aarch64-linux-gnu/

到这里就好了,因为是同名文件,所以不用重新使用软链接了,可能直接给覆盖了

不然下面可能还会有(只是参考,连接或者路径都没有操作):

  1. sudo rm /usr/lib/aarch64-linux-gnu/libstdc++.so.6
    删除原来的软连接

  2. sudo ln -s /usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.28 /usr/lib/aarch64-linux-gnu/libstdc++.so.6
    重新再给建立一个链接到你找到的这个库上。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐