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 ../../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 路径与命令搜寻顺序

  1. 以相对/绝对路径运行命令,例如『 /bin/ls 』或『 ./ls 』;
  2. 由 alias 找到该命令来运行;
  3. 由 bash 内建的 (builtin) 命令来运行;
  4. 透过 $PATH 这个变量的顺序搜寻到的第一个命令来运行。

透过 type -a ls 可以查询到命令搜寻的顺序

转载于:https://www.cnblogs.com/niaomingjian/p/8304013.html

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值