如何建立缩小尺寸的glibc?

时间:2017-10-02 08:05:08

标签: linux ubuntu shared-libraries glibc lib

我试图下载glibc 2.23源代码并在我的Ubuntu系统上构建它们。 我需要从源代码构建特定版本以获取为我的研究定制的glibc的修改版本,并且它将仅在我的研究应用程序中使用加载器环境变量(例如,LD_PREDLOAD或LD_LIBRARY_PATH)。

但是,当构建如下时,我得到一个巨大的文件作为输出(libc.so权重大约11MB):

  • 将源代码下载到某个本地目录(让我们说/ tmp / glibc /)
  • 为构建结果创建新目录(/ tmp / glibc / build)
  • 从build dir运行configure:
  • < build-dir> $ ../configure --prefix =< build-dir> 因此,构建过程将在build-dir下生成大小为11MB的libc.so文件。

无论如何都要减少构建的libc.so的大小?

P.S。

以下是我的系统详细信息: Linux版本4.4.0-93-generic(buildd @ lgw01-03)(gcc版本5.4.0 20160609(Ubuntu 5.4.0-6ubuntu1~16.04.4))#116-Ubuntu SMP Fri Aug 11 21:17:51 UTC 2017

谢谢:)

1 个答案:

答案 0 :(得分:1)

从源代码构建glibc可能是一个坏主意。请参阅this及其中的一些评论。它的当前版本是GNU libc 2.26 ...相反,请考虑升级您的整个Ubuntu发行版(Ubuntu 17.10应在几周内发布,2017年10月底)

  

../configure --prefix= build-dir

是对--prefix编辑软件--prefix中角色的误解。它涉及软件的安装位置,而不是其构建目录。

(我不确切知道你的libc应该是什么,因为--prefix=/ 对您的系统非常重要,也许它应该是libc但是你应该仔细检查)

  

有没有办法减少构建的libc.so的大小?

您可能会使用(非常谨慎)autoconf,但您可能会破坏您的系统。

你可能不关心减少musl-gcc的大小,因为Linux系统上几乎每个软件都使用它(和strip(1))!

BTW,还要考虑shared。它可以很好地与GNU glibc共存,并且在实践中仅由使用make install DESTDIR=/tmp/instmylibc(由它提供)构建的程序使用。

如果您正在进行一些研究,那么在musl-libc环境中工作是合理的。另见chroot(2)。您可以在/tmp/instmylibc的帮助下安装,然后适当地复制libc.so。阅读schroot

PS。在进行此类危险实验之前,请务必至少备份重要数据。我不认为chroot的大小应该是一个重要问题。但是,在安装chroot环境时,您可能需要const express = require('express'); const bodyParser = require('body-parser'); const app = express(); const port = 3000; //Array List let list = ['Fish', 'Lettuce', 'Chicken']; //Set view engine to pug app.set('view engine', 'pug'); //use bodyParser app.get('/', function(request, response){ response.render('list', {list}); }); app.get('/search', function(request, response){ return list.map(function(val){ if(request.query.search === val){ return response.send('Yup you got ' + val); } response.send('Not found') }); }); app.get('/new-item', function(request, response){ response.render('new'); }); app.post('/add-item', function(request, response){ let add = response.send(request.body); list.push(add); }); app.listen(port, function(){ console.log('Listening on Port 3000'); }); 使用/search