关于错误 libstdc++.so.6:cannot open shared object file 和 libstdc++.so.6: wrong ELF class 的解决和思考
2015-11-19 14:40
246 查看
在使用gcc编译C++程序时,运行出错:
# g++ -std=c++11 -o117exercise.exe 117exercise.cpp
# ./ 117exercise.exe
./117exercise.exe: error while loadingshared libraries: libstdc++.so.6:cannot open shared object file:No suchfile or directory
提示没有libstdc++.so.6,参考“解决/usr/lib/libstdc++.so.6:version `GLIBCXX_3.4.14' not found问题”,安装完之后,再次运行C++程序,还是出错:
# ./ 117exercise.exe
./117exercise.exe: error while loadingshared libraries: libstdc++.so.6: wrong ELF class: ELFCLASS32
这次是提示我虽然安装了,但是用错了32位的共享库libstdc++.so.6;
参照Howto fix the error “libstdc++.so.6: wrong ELF class: ELFCLASS64” after installedGCC 4.6,该参考与其它解决方案不同的地方在于,它的libstdc++.so.6.0.16提示是说在已经安装好的gcc目录,而不是从网上再次下载安装;
我在我手动安装的gcc 4.8.2目录下找到分享库文件:
# find / -iname libstdc++.so.6.0.*,
找到/home/zhm/softwares/gcc/gcc-4.8.2/lib64/libstdc++.so.6.0.18,即我的分享库为libstdc++.so.6.0.18,不同于网上说的16或17,按照步骤:
(1) 将gcc安装目录下的libstdc++.so.6.0.18拷贝到/usr/lib64(注意参考链接里面是32位,而我提示的是wrong ELF class: ELFCLASS32,即正确的应该是64位,可以参考下面的附注)
(2)在/usr/lib64目录建立软链接libstdc++.so.6、libstdc++.so
(3) 再次运行程序,成功
附注:
安装libstdc++.so.6.0.17过程的两点思考:
# ln -s/usr/lib/libstdc++.so.6.0.17 /usr/lib/libstdc++.so.6
# ./117exercise.exe
./117exercise.exe: error while loadingshared libraries: libstdc++.so.6:
cannotopen shared object file: No such file or directory
——我的gcc 4.8.2是手动安装的,所以可能导致/usr/lib64下没有更新libstdc++.so.6的软链接。
# ln -s/usr/lib64/libstdc++.so.6.0.17 /usr/lib64/libstdc++.so.6
# ./117exercise.exe
./117exercise.exe: error while loadingshared libraries: libstdc++.so.6:
wrongELF class: ELFCLASS32
——两种链接,两个不同结果(在/usr/lib下建立软链接提示说找不到,在/usr/lib64下建立软链接提示说库不对——不对的意思就是libstdc++.so.6.0.17不对,已经安装完的对应gcc 4.8.2的libstdc++.so.6.0.18才对),可以断定我的库版本应该为64位。
另外,GCC 4.8.2版本安装可以参考:GCC最新版安装及错误解决
# g++ -std=c++11 -o117exercise.exe 117exercise.cpp
# ./ 117exercise.exe
./117exercise.exe: error while loadingshared libraries: libstdc++.so.6:cannot open shared object file:No suchfile or directory
提示没有libstdc++.so.6,参考“解决/usr/lib/libstdc++.so.6:version `GLIBCXX_3.4.14' not found问题”,安装完之后,再次运行C++程序,还是出错:
# ./ 117exercise.exe
./117exercise.exe: error while loadingshared libraries: libstdc++.so.6: wrong ELF class: ELFCLASS32
这次是提示我虽然安装了,但是用错了32位的共享库libstdc++.so.6;
参照Howto fix the error “libstdc++.so.6: wrong ELF class: ELFCLASS64” after installedGCC 4.6,该参考与其它解决方案不同的地方在于,它的libstdc++.so.6.0.16提示是说在已经安装好的gcc目录,而不是从网上再次下载安装;
我在我手动安装的gcc 4.8.2目录下找到分享库文件:
# find / -iname libstdc++.so.6.0.*,
找到/home/zhm/softwares/gcc/gcc-4.8.2/lib64/libstdc++.so.6.0.18,即我的分享库为libstdc++.so.6.0.18,不同于网上说的16或17,按照步骤:
(1) 将gcc安装目录下的libstdc++.so.6.0.18拷贝到/usr/lib64(注意参考链接里面是32位,而我提示的是wrong ELF class: ELFCLASS32,即正确的应该是64位,可以参考下面的附注)
(2)在/usr/lib64目录建立软链接libstdc++.so.6、libstdc++.so
(3) 再次运行程序,成功
附注:
安装libstdc++.so.6.0.17过程的两点思考:
# ln -s/usr/lib/libstdc++.so.6.0.17 /usr/lib/libstdc++.so.6
# ./117exercise.exe
./117exercise.exe: error while loadingshared libraries: libstdc++.so.6:
cannotopen shared object file: No such file or directory
——我的gcc 4.8.2是手动安装的,所以可能导致/usr/lib64下没有更新libstdc++.so.6的软链接。
# ln -s/usr/lib64/libstdc++.so.6.0.17 /usr/lib64/libstdc++.so.6
# ./117exercise.exe
./117exercise.exe: error while loadingshared libraries: libstdc++.so.6:
wrongELF class: ELFCLASS32
——两种链接,两个不同结果(在/usr/lib下建立软链接提示说找不到,在/usr/lib64下建立软链接提示说库不对——不对的意思就是libstdc++.so.6.0.17不对,已经安装完的对应gcc 4.8.2的libstdc++.so.6.0.18才对),可以断定我的库版本应该为64位。
另外,GCC 4.8.2版本安装可以参考:GCC最新版安装及错误解决
相关文章推荐
- underscore源码解析(object)
- Bucket不为空,请检查该Bucket是否包含未删除的Object或者未成功的Multipart碎片
- 初学Objective-C
- Objective-C 编码建议
- Objective-C基础-类方法的学习
- iOS开发系列—Objective-C之Foundation框架
- Objective-C 编码建议
- Objective-C 编码建议
- Java Object 类源码分析
- Objective-c:类目、延展、协议
- object references an unsaved transient instance
- _nm_object_get_property: Error getting 'State' for /org/freedesktop/NetworkManager/ActiveConnection/
- Java不定参数Object… obj
- [2015.11.18] Objective-c UIScrollView 页面跳转 线传值
- Objective-C 学习笔记 - 第1章 入门
- Objective-C 学习笔记 - 第1章 入门
- Object-C排序的几种方法
- Geometry-Shader Object
- 新书Effective Objective-C 2.0
- Object-C中的集合类