当前位置:首页 » 编程软件 » 编译glibc安装

编译glibc安装

发布时间: 2023-03-27 09:18:34

linux中如何升级glibc

编译安装glibc
1.下载glibc

wgethttp://ftp.gnu.org/gnu/glibc/glibc-2.3.2.tar.gz

2.下载glibc-linuxthreads

wgethttp://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.3.2.tar.gz

3.解压

tar-zxvfglibc-2.3.2.tar.gz
cdglibc-2.3.2
tar-zxvf../glibc-linuxthreads-2.3.2.tar.gz
cd..
./glibc-2.3.2/configure--prefix=/usr--disable-profile--enable-add-ons--libexecdir=/usr/lib--with-headers=/usr/include
make
makeinstall

注意点:
1、要将glibc-linuxthreads解压到glibc目录下。
2、不能在glibc当前目录下运行configure

❷ 如何安装 glibc-2.15.tar

编译步骤:
下载glibc-2.15.tar.gz和补丁包glibc-ports-2.15.tar.gz
解压
$mv glibc-ports-2.15 glibc-2.15/ports
$mkdir glibc-build-2.15 &&cd glibc-build-2.15
$ ../glibc-2.15/configure \
--prefix=/usr/local/glibc_mips \
CC=mipsel-linux-gcc \
--host=mipsel-linux \
--build=i686-pc-linux-gnu \
--enable-add-on=nptl \
libc_cv_forced_unwind=yes \
libc_cv_c_cleanup=yes \
libc_cv_mips_tls=yes \
libc_cv_gnu99_inline=yes
ok,没问题
$make &&make install
大功告成

##########################################################################

下面是我编译时的过程和遇到的问题及解决:
##########################################################################

$tar xvf glibc-2.16.0.tar.bz2
$cd glibc-2.16.0
$./configure --prefix=/usr/local/glibc //先不加其他选项,除了安装路径,一切默认,网上一般配置arm的选项如下 --prefix=$HOME/usr/arm --with-headers=$HOME/usr/arm/glibc/arm-linux-glibc/include --with-libs=$HOME/usr/arm/glibc/arm-linux-glibc/lib
报错:
configure: error: you must configure in a separate build directory

很奇怪的问题,必须配置一个构建目录,刚开始以为是安装目录为创建
$mkdir /usr/local/glibc
问题仍然存在,网络之
$mkdir ../glibc-build && cd ../glibc-build
$../glibc-2.16.0/configure --prefix=/usr/local/glibc
出现新的问题:
configure: WARNING:
*** These auxiliary programs are missing or incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.
checking LD_LIBRARY_PATH variable... contains current directory
configure: error:
*** LD_LIBRARY_PATH shouldn't contain the current directory when
*** building glibc. Please change the environment variable
*** and run configure again.
第一个警告不用管它,第二个LD_LIBRARY_PATY也会有错?我的这个路径用了多少天了。仔细看提示,不应包含当前路径。打开~/.bash_profile
$cat ~/.bash_profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib export LD_LIBRARY_PATH

这也没当前路径啊。还是网络吧。
一个兄弟的解释是这样“LD_LIBRARY_PATH不能以终结符作为开始和最后一个字符,不能有2个终结符连在一起,我的LD_LIBRARY_PATH为 :/usr/local/firefox:/usr/local/firefox,只要在前面加上一个路径,不让:出现在第一个字符就可以了 ”
原来如此,第一个字符不能是":",修改~/.bash_profile
export LD_LIBRARY_PATH=/usr/local/lib export LD_LIBRARY_PATH

$../glibc-2.16.0/configure --prefix=/usr/local/glibc
ls一下,发现,当前目录生成了Makefile等一堆东西
$make && make install
没问题
下一步开始交叉编译
$mkdir ../glibc-build-mips && cd ../glibc-build-mips
$ ../glibc-2.16.0/configure --prefix=/usr/local/glibc_mips CC=mipsel-linux-gcc --host=mips
出现新的问题:
configure: running configure fragment for add-on libidn
configure: running configure fragment for add-on nptl
*** The GNU C library is currently not available for this platform.
*** So far nobody cared to port it and if there is no volunteer it
*** might never happen. So, if you have interest to see glibc on
*** this platform visit
*** http://www.gnu.org/software/libc/porting.html
*** and join the group of porters
看起来像是需要path,下载glibc-ports-2.16.tar.gz,放在源码包目录,解压
$ ../glibc-2.16.0/configure \
--prefix=/usr/local/glibc_mips \
CC=mipsel-linux-gcc \
CXX=mipsel-linux-g++ \
--host=mips \
--enable-add-ons=/home/hb/code/glibc/glibc-ports-2.16.0/sysdeps/mips
仍然报错:
configure: error: fragment must set $libc_add_on_canonical
改为:
$ ../glibc-2.16.0/configure \
--prefix=/usr/local/glibc_mips \
CC=mipsel-linux-gcc \
CXX=mipsel-linux-g++ \
--host=mips \
--enable-add-ons
报错:
configure: error: The mipsel is not supported.
这样不行,谷歌半天,总算知道补丁怎么用的了。把补丁目录拷到glibc目录下,改名为ports
$mv glibc-ports-2.16.0/ glibc-2.16.0/ports

$../glibc-2.16.0/configure \
--prefix=/usr/local/glibc_mips \
CC=mipsel-linux-gcc \
CXX=mipsel-linux-g++ \
--host=mipsel-linux \
--build=i686-pc-linux-gnu \
--enable-add-on
继续报错:
configure: error:
*** These critical programs are missing or too old: ld as
*** Check the INSTALL file for required versions.
这个问题可折腾死我了。弄了好半天,就是不行,最后google发现,原来是ld和as版本不对,不是太高就是太低。
configure中找到$AS --version
发现版本是这么匹配的2.1*.*
$mipsel-linux-ld
GNU ld (GNU Binutils) 2.18.50.20080908
原来是这样,在configure版本号那一行修改,最后的括号前面加入
|2.18.50.×
as那一行也同样修改
然后
$make
开始编译,看起来不错
好半天后,编译也报错了

In file included from ../include/uchar.h:1,
from mbrtoc16.c:23:
../wcsmbs/uchar.h:47:5: error: #error "<uchar.h> requires ISO C11 mode"
In file included from ../include/uchar.h:1,
from mbrtoc16.c:23:
../wcsmbs/uchar.h:52: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char16_t'
../wcsmbs/uchar.h:53: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char32_t'
../wcsmbs/uchar.h:61: error: expected ')' before '*' token
../wcsmbs/uchar.h:66: error: expected declaration specifiers or '...' before 'char16_t'
../wcsmbs/uchar.h:73: error: expected ')' before '*' token
../wcsmbs/uchar.h:78: error: expected declaration specifiers or '...' before 'char32_t'
mbrtoc16.c:37: error: expected ')' before '*' token
make[2]: *** [/home/hb/code/glibc/glibc-build-mips/wcsmbs/mbrtoc16.o] 错误 1
make[2]:正在离开目录 `/home/hb/code/glibc/glibc-2.16.0/wcsmbs'
make[1]: *** [wcsmbs/subdir_lib] 错误 2
make[1]:正在离开目录 `/home/hb/code/glibc/glibc-2.16.0'
make: *** [all] 错误 2
看看这个头文件咋回事
$ vim ../glibc-2.16.0/wcsmbs/uchar.h
#if defined __GNUC__ && !defined __USE_ISOCXX11
/* Define the 16-bit and 32-bit character types. Use the information
provided by the compiler. */
# if !defined __CHAR16_TYPE__ || !defined __CHAR32_TYPE__
# if defined __STDC_VERSION__ && __STDC_VERSION__ < 201000L
# error "<uchar.h> requires ISO C11 mode"
# else
# error "definitions of __CHAR16_TYPE__ and/or __CHAR32_TYPE__ missing"
# endif

# endif

明白了,原来是需要c11支持,mipsel-linux-gcc -v一下,我的支持c99.原来如此。暂时没招了,我还做不到修改c11的支持,只剩两个办法,不用这个glibc版本或者重新编译一个支持c11的交叉编译器。编译器需要做的比较多,暂时先换个低点的版本吧。
下载galibc-2.15版本
重复上面步骤,解压tar包
解压ports包
$mv glibc-ports-2.15 glibc-2.15/ports
$mkdir glibc-build-2.15 &&cd glibc-build-2.15
$ ../glibc-2.15/configure \
--prefix=/usr/local/glibc_mips \
CC=mipsel-linux-gcc \
--host=mipsel-linux \
--build=i686-pc-linux-gnu \
--enable-add-on=nptl \
libc_cv_forced_unwind=yes \
libc_cv_c_cleanup=yes \
libc_cv_mips_tls=yes \
libc_cv_gnu99_inline=yes
ok,没问题
$make &&make install
库已经编好了,但是不能直接使用,必须再用新的库重编一遍编译器才行。

上一篇

❸ linux glibc默认安装在哪

GNU C库(glibc)是标准C库的GNU实现。glibc是GNU工具链的关键组件,用于和二进制工具和编译器一起使用,为目标架构生成用户空间应用程序。
当从源码进行构建时,一些Linux程序可能需要链接到某个特定版本的glibc。在这种情况下,你可能想要检查已安装的glibc信息以查看是否满足依赖关系。
这里介绍几种简单的方法,方便你检查Linux上的glibc版本。
方法一
下面给出了命令行下检查GNU C库的简单命令。
$ ldd --version
在本例中,glibc版本是2.19。
方法二
另一个方法是在命令行“输入”glibc 库的名称(如,libc.so.6),就像命令一样执行。
输出结果会显示更多关于glibc库的详细信息,包括glibc的版本以及使用的GNU编译器,也提供了glibc扩展的信息。glibc变量的位置取决于Linux版本和处理器架构。
在基于Debian的64位系统上:
$ /lib/x86_64-linux-gnu/libc.so.6
在基于Debian的32位系统上:
$ /lib/i386-linux-gnu/libc.so.6
在基于Red Hat的64位系统上:
$ /lib64/libc.so.6
在基于Red Hat的32位系统上:
$ /lib/libc.so.6

❹ linux编译安装glibc-2.17

这个其实应该找一个旧版本的ntfs-3g,版本太新
另外,不要随便编译安装glibc,如果你新编译的glibc覆盖了系统中的,不能保证你的系统还能正常使用

❺ make install glibc,卸载glibc

你没定义安装路纳锋径,应该是按默认安装到/usr/local下面的了,删除相亩橡应文件夹就可以的了.make clean 只是清除编译目录下的已编译文件.make install后会将编译好的文件迅茄旁安装到一个或多个指定或默认的目录里的.

❻ 求助QT5.4 安装在win8.1后无法编译

关于QT安装时出现错误请参照我的上一篇文章http://hi..com/whyme%CE%DE%CF%DE/blog/item/91103d1a71f4aed5e2fe0b65.html
现在说一下编译运行出错的解决办法:
说明:redhat红帽5.4有点太老了,所以运行最新的QT时,出现了各种问题,最主要的就是各种库的问题:
(1)undefined reference to `FcFreeTypeQueryFace'的问题
需要更新fontconfig,我用的是fontconfig-2.6.0.tar.gz,2.5.0我试了,出现了很多错误,不知道为什么2.6.0可以,
附下载地址http://115.com/file/be9m2r
解压到/usr/src 进入后 ./autogen.sh 然后终端中提示make,你就make,最后make install。完成。./autogen.sh也可以输入./configure --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man 具体可能是./configure后指明了安在你想要安得地方吧(我用的是./autogen.sh)
如果期间遇到错误不要不耐烦,按照提示网络一下会有解决的办法的。
(2)undefined reference to 'FT_Library_SetLcdFilter'
这是由于freetype太旧的原因,也是一样,需要更新:
附下载地址:http://115.com/file/anwcxdfk
安装方法与(1)一样。也有安装(1)时可能有问题要先安装(2) 这个自己尝试吧,我是先(1)后(2)的。
还有就是我的系统是红帽企业版5.4,不是的或者版本不一样的,我不知道我的方法有没有效果。
(3)接下来应该有的例程就可以编译运行了,但是还有不能运行的,那是因为你的glibc太旧了,这个是c动态库。必须注意的是,几乎所有的应用程序都依赖于glibc的动态库,重新编译安装glibc必须非常谨慎,一旦出错可能导致系统无法继续使用。所以强烈建议阅读源码目录下的INSTALL。
附下载地址:http://115.com/file/e749sc6n
第一步是配置glibc,出于安全的考虑,glibc不允许在源码目录树下编译,必须新建一个目录,然后在新建目录下运行configure,我就在/usr/src下建了一个glibc文件夹mkdir glibc。然后在新建目录里运行解压缩文件中的config,在运行这个之前,先在终端运行需要加上优化开关export CFLAGS="-g -O2 -march=i686" ,然后运行../glibc/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin 这样就不是默认安装的路径了安装在/usr下,这会将glibc安装为linux系统的标准库。
执行make -j 。glibc的编译相当耗时,可以给make加上-j选项并行编译glibc。make -j
然后make install。
make时可能会有错误我就遇到了以下错误,我是这么解决的:
1、在编译glibc的过程中可能出现错误:“../sysdeps/i386/fpu/s_frexp.S:66: Error: invalid identifier for ".ifdef"”,解决方法是:
1)、在glibc源码目录下找到文件:nptl/sysdeps/pthread/pt-initfini.c,找到第46行附近:asm ("\n#include "defs.h"");在其后添加代码:
asm ("\n#if defined __i686 && defined __ASSEMBLER__");
asm ("\n#undef __i686");
asm ("\n#define __i686 __i686");
asm ("\n#endif");
2)、在glibc源码目录下找到文件:sysdeps/unix/sysv/linux/i386/sysdep.h,找到第30行附近:#include <tls.h>,在其后添加代码:
#if defined __i686 && defined __ASSEMBLER__
#undef __i686
#define __i686 __i686
#endif
重新make
2、在编译glibc的过程中可能出现错误:“./sysdeps/i386/i686/multiarch/strcmp.S:78: Error: Error: unrecognized symbol type "gnu_indirect_function"unrecognized symbol type "gnu_indirect_function"”,原因是没有安装新版的binutils,如果依照前面的步骤安装了binutils-2.21应该不会出现该错误。(注第2个错误我没遇到)
注:还有一个地方不知道是哪一步遇到错误了需要安装libxml我在红帽的系统镜像中的server中找到了三个相关文件libxml2*.rpm安装即可!!!!!!
至此,重启reboot,打开QT运行例程,可能还有问题,我的就是还是有问题,解决办法如下:
把QT的安装目录和QT中的bin都添加为环境变量,在/etc/profile下,具体怎么填您应该知道吧,这里不提了。source /etc/profile一下
然后再点击QT的左边栏的项目在构建和运行的选项中,您可能哪里没有选择,一定要让你的项目有效和目录正确,QT的版本正确!!!QT的gcc编译目录正确,gcc一般用的是QT文件中自带的!!如果还不行,那就在你的在项目目录项运行make clean!!如果还不对!!!vi Makefile 可能是这里有问题,如果不会改,就干脆删了rm Makefiel。然后再在QT中运行一下。

❼ 高版本gcc编译出的程序在低版本glibc机器上运行

比如我们用gcc 9.3.0编译程序,但需要发布的机器gcc版本是4.8.5,怎么办?祥孙

你可能想到如下方法

将libc和libstdc++静态编译,编译时带上如下参数。

glibc并不推荐静态链接,你依赖的其他库可能依赖的了glibc,并且往往是动态链接的,可以通过 nm <bin> | grep GLIBC_ 确定你的程序是否依赖了glibc。

使用携带gcc9.3.0环境的容器发布程序,是可以的。但是在一些没有容器且没有sudo权限的场合,依然不太友好。

这个方法虽然听起来不是很优雅,但其实如果你对elf文件有一些了解,是不错的方式。下面说下具体的方法。

当你有条件获得程序源码,并能够重新编译时,可以直接在编译时指定相关参数来解决。
先说编译时要增加的参数:

gcc参数

ld参数

这两个参数分别设置的elf文件中的rpath和interpreter字段。

rpath
全名 run-time search path ,是elf文件中一个字段,它指定了可执行文件执行时搜索so文件的第一优先位置,一般编译器默认将该字段设为空。elf文件中还有一个类似的字段runpath,其作用与rpath类似,但搜索优先级稍低。搜索优先级:

如果你需要使用相对路径指定lib文件夹,可以使用 ORIGIN 变量,ld会将ORIGIN理解成可执行文件所在的路径。

interpreter
动态库加载器,程序启动时,操作系统会先把控制权转交给ld-linux-x86-64.so.2,该so负责加载所有程序依赖的so。。这个字段在链接时会帮你自动设置,64bit程序一般为 /lib64/ld-linux-x86-64.so.2 。修改rpath或者LD_LIBRARY_PATH指向本地lib目录,但通过ldd程序,发现/lib64/ld-linux-x86-64.so.2这个so仍然指向系统so。原因就是这个字并宽段是写谨蔽链死在elf文件中的,并不受LD_LIBRARY_PATH影响。

编译时带上这两个参数,下面只需要将你程序依赖的so打包一份,随程序进行发布即可。

当你无法编译程序时,也可以通过其他方式修改rpath和interpreter。这种情况需要使用到一个工具 patchelf ,通过 dnf install patchelf 即可安装。你可以通过它修改elf文件的rpath和interpreter:

除了绝对路径,一种比较常见的方式是在部署前,使用 pwd 获取当前路径,使用相对路径指向本地lib。

❽ ubuntu 12.04怎么安装 glibc

ubuntu 12.04 好像是eglibc, 不是glibc, 安装eglibc 请sudo apt-get install libc-dev-bin

如果一定要装glibc, 请源码编译, 但是, 一定注意, 不能覆盖掉原来的eglibc, 可以通过configure 时添加--prefix=安装位置来安装. 然而这并没有什么鸟用, 因为, 这种方式安装上的glibc 没法用.

❾ glibc安装错误error: you must configure in a separate build directory

要新建一个目录,进入到该目录,使用绝对路径编译安装。
新建一个目录,然后进入该目录,用绝对路径编译。
mkdir /usr/local/glibc
cd /usr/local/glibc
/usr/local/src/glibc-2.7/configure
make && make install

❿ 哪位大神简要介绍一下Linux如何安全升级glibc我在debian下成功编译了新版本的glibc

你可以借鉴一下gentoo的升级思路,因为gentoo都是源代码编译的
首先编译核心工具组(gcc, ld, binutils),注意使用静态编译(--disable-shared),安装到裤李悉指定的位置(--with-sysroot --with-local-prefix)
然后chroot到那个位置编译glibc并安装
然后使用新的glibc静态编译核心工具组,chroot回去,覆盖安装回原来胡乎的地方
用此工具组再次扰蠢本地编译glibc

热点内容
免费加密隐身侠 发布:2024-05-05 05:07:54 浏览:613
我的世界模组服务器推荐手机版 发布:2024-05-05 05:02:49 浏览:818
pr默认存储 发布:2024-05-05 04:29:31 浏览:553
roblox跑酷脚本怎么做 发布:2024-05-05 03:57:35 浏览:702
捷径清理缓存 发布:2024-05-05 03:57:35 浏览:479
ftputility哪里下载 发布:2024-05-05 03:47:13 浏览:1001
雷凌运动版如何连接安卓手机导航 发布:2024-05-05 03:42:48 浏览:268
自动鬼使黑脚本 发布:2024-05-05 03:10:49 浏览:880
游戏脚本编程书籍推荐 发布:2024-05-05 02:59:13 浏览:72
编译器书籍推荐 发布:2024-05-05 02:57:02 浏览:56