在编译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

 

 

 

 

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐