本文共 2221 字,大约阅读时间需要 7 分钟。
make 3.79
gcc 4.6
binutils 2.22
texinfo 4.7
awk 3.1.2
per5 ---
sed 3.02
autoconf gettext 0.10.36
bison 2.7
由于内核比较新,所以编译的时候会提示找不到头文件等问题,需要:点击(此处)折叠或打开
对于 64位系统,我们需要设置cflags中 –march=x86-64 ;其他的默认为-march=i486/i386/i686等
Ln –s /usr/include/x86-64-linux-gnu/asm /usr/include/asm
编译步骤:#tar -zxvf glibc-2.21.tar.gz
#cd glibc-2.21 #export CFLAGS="-g -O2 -march=i486" #./glibc-2.21/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin --disable-sanity-checks#make
#make install 在修改glibc源代码的时候,我们不免需要打印,这里可以用: fprintf(stderr,"this is your val:%d...\n",val); configure 关键选项说明: prefix=/usr/local/glibc 指定glibc安装目录 --with-headers=/usr/include 指定需要的系统头文件目录 --with-binutils=/usr/bin 指定需要的系统工具目录 --with-libs= 指定需要的库目录 有时候我们编译安装后,可能会找不到库什么的,比如 :出现这类错误表示,系统不知道xxx.so放在哪个目录下,这时候就要在/etc/ld.so.conf中加入xxx.so所在的目录。
一般而言,有很多的so会存放在/usr/local/lib这个目录底下,去这个目录底下找,果然发现自己所需要的.so文件。
所以,在/etc/ld.so.conf中加入/usr/local/lib这一行,保存之后,再运行:/sbin/ldconfig –v更新一下配置即可
系统的库一般是一个软件链接,即libc.so.6,我的环境是: #ls -l /lib/i386-linux-gnu/libc.so.6 #lrwxrwxrwx 1 root root 32 4月 17 11:10 /lib/i386-linux-gnu/libc.so.6 -> /lib/i386-linux-gnu/libc-2.19.so 一般make会成功,但是make install的时候可能会失败,比如创建link的时候,这个时候 在你编译的目录下有一个libc.so 它就是你要的c库。只不过后来会改名字为libc-2.21.so而已,如果make install 成功 它会把系统的libc.so.6 链接到 libc-2.21.so 这里需要注意的是 : 1. /lib 和 /usr/lib 里面加东西,是不用修改 /etc/ld.so.conf 的,但是完了之后要调一下 ldconfig ,不然这个library会找不到 2. 想往上面两个目录以外加东西的时候,一定要修改/etc/ld.so.conf,然后再调用ldconfig,不然也会找不到 3. 如果想在这两个目录以外放lib,但是又不想在/etc/ld.so.conf中加东西(或者是没有权限加东西)。那也可以,就是export一个全局变量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时候使用 比如我遇到的问题就是虽然make成功了,在make install的最后一步替换libc失败,导致运行依赖c库的程序都不能成功运行。 可以执行如下操作,需要知道系统的glibc版本: #LD_PRELOAD=/lib/i386-linux-gnu/libc-2.19.so ls -l 然后在进一步操作,比如我的安装glibc到/usr/下,那么虽然make install失败,那么利用上面的执行ldconfig -V 即可,需要让/usr/lib生效. 然后删除系统的libc.so.6链接。我们的库就可以运行了。你也可以直接替换libc.so.6链接的库,都是可以的.转载地址:http://iwana.baihongyu.com/