升级GCC后找不到动态库“/usr/lib64/libstdc++.so.6: version ‘CXXABI_1.3.9’ not found”的解决办法

升级GCC后运行程序出现错误:/usr/lib64/libstdc++.so.6: version "CXXABI_1.3.9" not found

问题的原因是因为升级GCC后相应的动态库没有更新,导致新编译器编译程序成功,运行不成功。

使用ls命令查看该文件可以看到动态库是一个软链接:

 

 

1

2

> ls -l /usr/lib64/libstdc++.so.6

lrwxrwxrwx 1 root root 19 Aug 24 12:28 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.13

 

查看动态库:

 

 

1

2

3

4

5

6

> strings /usr/lib/libstdc++.so.6.0.13 | grep CXXABI

CXXABI_1.3

CXXABI_1.3.1

CXXABI_1.3.2

CXXABI_1.3.3

CXXABI_1.3.4

 

最高版本1.3.4,小于需要的1.3.9,需要手动更新动态库。

动态库位于gcc编译目录下,一般来说编译都创建了一个新建的目录build,可以在这里查找:

 

 

1

2

3

4

5

6

7

8

> cd **/gcc-7.2.0/build/ # build是编译时创建的目录

> find . -name "libstdc++.so.*"

./prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.24

./prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6

./stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.24

./stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6

./x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.24

./x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6

 

有三个不同版本的库目录,prev开头的应该是预览版本,stage1不知道是什么版本,用第三个就好了。

 

 

1

2

3

> /bin/cp -f x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6* /usr/lib

> rm -f /usr/lib64/libstdc++.so.6 # 移出旧链接

> ln -s /usr/lib/libstdc++.so.6.0.24 /usr/lib64/libstdc++.so.6 # 创建新链接

 

查看动态库版本:

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

> strings /usr/lib/libstdc++.so.6 | grep CXXABI

CXXABI_1.3

CXXABI_1.3.1

CXXABI_1.3.2

CXXABI_1.3.3

CXXABI_1.3.4

CXXABI_1.3.5

CXXABI_1.3.6

CXXABI_1.3.7

CXXABI_1.3.8

CXXABI_1.3.9

CXXABI_1.3.10

CXXABI_1.3.11

CXXABI_TM_1

CXXABI_FLOAT128

 

然后运行程序就不会报错了。

你可能感兴趣的:(升级GCC后找不到动态库“/usr/lib64/libstdc++.so.6: version ‘CXXABI_1.3.9’ not found”的解决办法)