centos6.5升级glibc-2.18
默认情况下,CentOS 6.5自带的码下glibc版本为glibc-2.。为确保众多运行在CentOS上的码下应用能成功编译与安装,有必要升级至glibc-2.版本。码下 升级glibc前,码下请务必了解,码下算命app源码glibc是码下CentOS的底层基础程序,升级失败可能导致基础命令无法使用。码下因此,码下切勿贸然退出窗口。码下建议按照问题解决的码下步骤来操作,若升级失败,码下首先尝试还原glibc,码下若无效,码下则考虑重新安装操作系统。码下如有快照备份,建议使用快照恢复。智能洗衣机系统源码 升级前,先查询当前glibc版本。通过访问glibc官网,下载glibc-2..tar.gz源码包。 将下载的源码包上传至CentOS系统,并运行以下命令进行安装。请注意,此过程可能需要较长时间,预计约十分钟。安装完成后,可能还会遇到其他问题,可参考后续的问题解决方法,确保系统稳定。 安装完成后,可能出现以下问题: 在执行`make install`之后,可能会遇到`Segmentation fault`错误。牛联盟源码对接v支付这通常发生在加载共享库时,例如`__vdso_time: invalid mode for dlopen(): Invalid argument`。 若基本命令无法使用,这表明`/lib/libc.so.6`文件在安装过程中被修改。为解决此问题,尝试运行以下命令来保持环境变量与现有glibc一致: 之后,重新执行基本命令,检查是否恢复正常。若glibc升级失败,可执行以下命令还原至之前版本: 随后,再次检查基本命令是否正常。如需进一步排查升级过程中的问题,建议临时加载之前可用的库文件,以恢复系统。 若本文解答了您的问题,请点击下方链接以示支持,禾匠商城源码短信验证感激不尽。glibc源码分析(二)系统调用
在glibc源码中,许多系统调用被使用了.c封装的方式进行封装。这一过程借助嵌入式汇编,严格遵循系统调用封装规则。以stat函数为例,其实现揭示了.c封装的奥秘。
在源代码中,stat系统调用被INLINE_SYSCALL宏所封装。该宏首先调用INTERNAL_SYSCALL宏,执行系统调用并把返回值存入resultvar变量中。接下来,通过判断系统调用是否成功执行,采取相应的后续操作。若执行错误,则调用__syscall_error设置errno并返回-1;若执行成功,通达信零轴源码则返回resultvar。
在处理系统调用参数个数nr时,INTERNAL_SYSCALL宏发挥了关键作用。根据nr的不同,宏会调用不同的内部函数进行处理。例如,当nr为0时,调用INTERNAL_SYSCALL_MAIN_0宏,设置eax寄存器为系统调用号,执行*_dl_sysinfo函数进行系统调用。当nr为1时,宏将参数1存入ebx寄存器,同时设置eax寄存器为系统调用号,并执行系统调用。
类似的,nr为2、3、4、5或6时,宏分别会将参数2至6存入ecx、edx、esi、edi或ebp寄存器中,并与系统调用号相结合,执行*_dl_sysinfo函数。通过这一系列的嵌入式汇编操作,.c文件成功封装了系统调用,实现了高效、精确的调用过程。
总的来说,glibc中.c封装的实现展示了汇编语言的强大功能,以及在系统调用处理中的应用。通过精确的汇编指令和灵活的参数传递,封装过程确保了系统调用的执行效率和正确性。
å¦ä½å®è£ glibc-2..tar
ç¼è¯æ¥éª¤ï¼
ä¸è½½glibc-2..tar.gzåè¡¥ä¸å glibc-ports-2..tar.gz
解å
$mv glibc-ports-2. glibc-2./ports
$mkdir glibc-build-2. &&cd glibc-build-2.
$ ../glibc-2./configure \
--prefix=/usr/local/glibc_mips \
CC=mipsel-linux-gcc \
--host=mipsel-linux \
--build=i-pc-linux-gnu \
--enable-add-on=nptl \
libc_cv_forced_unwind=yes \
libc_cv_c_cleanup=yes \
libc_cv_mips_tls=yes \
libc_cv_gnu_inline=yes
ok,没é®é¢
$make &&make install
大ååæ
##########################################################################
ä¸é¢æ¯æç¼è¯æ¶çè¿ç¨åéå°çé®é¢å解å³ï¼
##########################################################################
$tar xvf glibc-2..0.tar.bz2
$cd glibc-2..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..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..0/configure --prefix=/usr/local/glibc
lsä¸ä¸ï¼åç°ï¼å½åç®å½çæäºMakefileçä¸å ä¸è¥¿
$make && make install
没é®é¢
ä¸ä¸æ¥å¼å§äº¤åç¼è¯
$mkdir ../glibc-build-mips && cd ../glibc-build-mips
$ ../glibc-2..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
*** piler. */
# if !defined __CHAR_TYPE__ || !defined __CHAR_TYPE__
# if defined __STDC_VERSION__ && __STDC_VERSION__ < L
# error "<uchar.h> requires ISO C mode"
# else
# error "definitions of __CHAR_TYPE__ and/or __CHAR_TYPE__ missing"
# endif
# endif
æç½äºï¼åæ¥æ¯éè¦cæ¯æï¼mipsel-linux-gcc -vä¸ä¸ï¼æçæ¯æc.åæ¥å¦æ¤ãææ¶æ²¡æäºï¼æè¿åä¸å°ä¿®æ¹cçæ¯æï¼åªå©ä¸¤ä¸ªåæ³ï¼ä¸ç¨è¿ä¸ªglibcçæ¬æè éæ°ç¼è¯ä¸ä¸ªæ¯æcç交åç¼è¯å¨ãç¼è¯å¨éè¦åçæ¯è¾å¤ï¼ææ¶å æ¢ä¸ªä½ç¹ççæ¬å§ã
ä¸è½½galibc-2.çæ¬
éå¤ä¸é¢æ¥éª¤ï¼è§£åtarå
解åportså
$mv glibc-ports-2. glibc-2./ports
$mkdir glibc-build-2. &&cd glibc-build-2.
$ ../glibc-2./configure \
--prefix=/usr/local/glibc_mips \
CC=mipsel-linux-gcc \
--host=mipsel-linux \
--build=i-pc-linux-gnu \
--enable-add-on=nptl \
libc_cv_forced_unwind=yes \
libc_cv_c_cleanup=yes \
libc_cv_mips_tls=yes \
libc_cv_gnu_inline=yes
ok,没é®é¢
$make &&make install
åºå·²ç»ç¼å¥½äºï¼ä½æ¯ä¸è½ç´æ¥ä½¿ç¨ï¼å¿ é¡»åç¨æ°çåºéç¼ä¸éç¼è¯å¨æè¡ã
ä¸ä¸ç¯
已解决Bug. 无root权限下glibc2.安装失败的解决方案+make升级
在学院超算服务器上遇到安装RosettaFold2时,因服务器glibc版本为2.,低于所需2.版本,尝试在个人目录下通过源码安装。由于无root权限,使用源码安装并修改环境变量指定glibc版本。
然而,make命令在安装过程中报错,疑似glibc版本更新导致代码变动。考虑直接安装更高版本glibc,试用2.版本,但同样在make命令时遇到问题。发现make版本过低,决定下载最新版make解决。
在无root权限情况下,只能通过环境变量调整。打开~/.bashrc,加入新版本make的路径,保存并重启shell。检查后确认已安装最新版make。再次执行配置步骤时,仍然提示make版本过低。
经过搜索,发现报错源可能在于gmake版本不足。由于无法替换root指定的gmake,学习root方法挂载新版本make到gmake上。同样在~/.bashrc中加入gmake路径,保存并重启shell。再次检查,发现已安装最新版gmake。
最终执行2.版本的glibc安装,不再遇到版本不兼容问题,成功解决。
`GLIBC_2.‘ not found
当遇到“GLIBC_2.‘ not found”的错误时,解决方法是安装glibc。通过源代码安装,会在/usr/local目录生成包含bin、lib、include文件的glibc目录。
在lib目录中能找到所需的libc.so.6和libm.so.6文件。然而,仅生成和安装这些文件是不够的,还需要导入路径以便其他软件能访问。
直接导入这些文件到环境变量是正确的做法,但必须注意,不能修改系统级别的环境变量如/etc/profile,否则可能引起系统命令执行错误。
将新生成的glibc文件路径添加到个人环境变量中,确保软件可以正常访问libc.so.6和libm.so.6。这种方法解决了找不到依赖文件的错误,确保了软件的正常运行。
2024-11-30 14:49
2024-11-30 14:34
2024-11-30 14:04
2024-11-30 13:10
2024-11-30 12:54