ubuntu 一种解决方法情况:undefined reference to `std::__throw_out_of_range_fmt(char const*, ...)
在编译lzma-4.32.7工具时报了如下错误g++ -g -O2 -o lzma lzmp.o C_FileIO.o CRC.o Alloc.o FileStreams.o InBuffer.o OutBuffer.o ../../src/sdk/7zip/Compress/LZMA/libLZMA.a ../../src/sdk/7zip/Compress/LZ/libLZ.a ../../s
·
在编译lzma-4.32.7工具时报了如下错误
g++ -g -O2 -o lzma lzmp.o C_FileIO.o CRC.o Alloc.o FileStreams.o InBuffer.o OutBuffer.o ../../src/sdk/7zip/Compress/LZMA/libLZMA.a ../../src/sdk/7zip/Compress/LZ/libLZ.a ../../src/sdk/7zip/Common/libCommon.a ../../src/sdk/7zip/Compress/RangeCoder/libRangeCoder.a
lzmp.o: In function `std::string::_M_check(unsigned long, char const*) const':
/usr/local/include/c++/4.9.4/bits/basic_string.h:324: undefined reference to `std::__throw_out_of_range_fmt(char const*, ...)'
collect2: error: ld returned 1 exit status
Makefile:279: recipe for target 'lzma' failed
引用看了/usr/local/include/c++/4.9.4/bits/basic_string.h:324 这绝对是个系统问题啊。
size_type
_M_check(size_type __pos, const char* __s) const
{
if (__pos > this->size())
__throw_out_of_range_fmt(__N("%s: __pos (which is %zu) > "
"this->size() (which is %zu)"),
__s, __pos, this->size());
return __pos;
}
如果不是gcc的bug就是系统中gcc的编译资源和ld的链接资源不匹配了
看了下gcc 版本gcc 版本 4.9.4 (GCC)
貌似是没有问题啊,看了一下系统的所有gcc版本
[root@bstar /]#type -a gcc
gcc 是 /usr/bin/gcc
gcc 是 /usr/local/bin/gcc
/usr/bin/gcc:gcc version 5.4.0 20160609
/usr/local/bin/gcc:gcc 版本 4.9.4 (GCC)
系统中查看工具的查询目录顺序:/usr/local/bin 的确在/usr/bin之前。
[root@bstar /]#export $PATH
-bash: export: `/opt/hisi-linux/x86-arm/arm-hisiv600-linux/target/bin:/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin:/opt/hisi-linux/x86-arm/arm-hisiv400-linux/target/bin:/opt/hisi-linux/x86-arm/arm-hisiv600-linux/target/bin:/opt/hisi-linux/x86-arm/arm-hisiv400-linux/target/bin:/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin:/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin:/opt/hisi-linux/x86-arm/gcc-arm-none-eabi-4_9-2015q3/bin:/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin':
修改 /etc/environment 后调整顺序,重新登录就可以了。
备注:修改/etc/environment 不知道是否重启有效,公共服务器,以后有机会重启再看吧。
拓展内容
Linux 路径与命令搜寻顺序
- 以相对/绝对路径运行命令,例如『 /bin/ls 』或『 ./ls 』;
- 由 alias 找到该命令来运行;
- 由 bash 内建的 (builtin) 命令来运行;
- 透过 $PATH 这个变量的顺序搜寻到的第一个命令来运行。
透过 type -a ls 可以查询到命令搜寻的顺序
转载于:https://www.cnblogs.com/niaomingjian/p/8304013.html
更多推荐
所有评论(0)