如何减少C ++标准库libstdc ++。所以文件大小

时间:2018-05-29 09:38:09

标签: c++

我的计算机上有不同的C ++编译器,每个编译器都有自己的libstdc ++。所以它们的大小不同。

window.onmousemove = logMouseMove;

function logMouseMove(e) {
  e = e || window.event;    
  mousePos = e.clientX;
  el = document.querySelector('.circle');
  const elPos = getOffset(el);
  if(mousePos < (elPos -20) || mousePos > (elPos + 20)) {
     triggerAnimation(); 
  };  
}

function getOffset(el) {
  el = el.getBoundingClientRect();
  return el.left + window.scrollX + 50;
}

function triggerAnimation() {
  xValues = [100, 0, 400];
  yValues = [0, 50, 200];
  const xVal = xValues[Math.floor(Math.random()*xValues.length)];
  const yVal = yValues[Math.floor(Math.random()*yValues.length)];
  var duration = anime({
    targets: '#duration .el',
    translateX: [
      { value: xVal, duration: 1000, delay: 500, elasticity: 0 },
      { value: xVal, duration: 1000, delay: 500, elasticity: 0 }
    ],
    scaleX: [
      { value: 2, duration: 100, delay: 500, easing: 'easeOutExpo' },
      { value: 1, duration: 900, elasticity: 300 },
      { value: 2, duration: 100, delay: 500, easing: 'easeOutExpo' },
      { value: 1, duration: 900, elasticity: 300 }
    ],
    translateY: [
      { value: yVal, duration: 1000, delay: 500, elasticity: 0 },
      { value: yVal, duration: 1000, delay: 500, elasticity: 0 }
    ],
  });


  }

我想知道为什么libstdc ++。so.6.0.13比其他人小得多,并且有什么方法可以减少其他人。尺寸。 如果有人可以帮助我,我会很高兴。

1 个答案:

答案 0 :(得分:9)

libstdc ++的版本控制方案具有误导性,当您考虑相应的GCC版本时,这些版本之间的差异实际上很大:

  • GCC 4.4.2:libstdc ++。so.6.0.13(2009年10月15日)
  • GCC 4.9.0:libstdc ++。so.6.0.20(2014年4月22日)
  • GCC 5.1.0:libstdc ++。so.6.0.21(2015年4月22日)
  • GCC 7.2.0:libstdc ++。so.6.0.24(2017年8月14日)

GCC 4.4和4.9之间的C ++ 14实现,以及C ++ 17和各种实验提案之后的主要工作。

来自libstdc ++&#39; s FAQ

  

通常磁盘上库的大小并不明显......

     

。 。 。目标文件   问题包含模板类和模板函数,   预先实例化,并将它们分开导致严重的维护   头痛。

简而言之 - 关于尺寸的做法不多。如果你真的感兴趣,你可以看看使用readelf -a libname.so

内部的内容

您可以随时降级到较旧的GCC版本,该版本将附带较小的libstdc ++。

话虽如此,在Ubuntu上,libstdc++.so.6.0.24的大小为1.54MB,所以实际上并没有那么多增长。您的特定发行版可能有问题,或者您可能抓住了调试版本。您可以尝试使用strip libstdc++.so.6.0.24剥离调试符号(strip实用程序是binutils的一部分)。