當前位置:首頁 » 編程軟體 » 編譯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

熱點內容
open函數c語言 發布:2024-04-25 21:47:42 瀏覽:406
簡訊刪除後怎麼找伺服器 發布:2024-04-25 21:15:06 瀏覽:388
查ip地址伺服器數量 發布:2024-04-25 20:49:48 瀏覽:620
安卓手機單核性能為什麼不高 發布:2024-04-25 20:48:07 瀏覽:56
群暉php 發布:2024-04-25 20:00:35 瀏覽:884
怎麼查看我的wifi密碼 發布:2024-04-25 18:54:43 瀏覽:757
fckeditorforjava 發布:2024-04-25 18:50:27 瀏覽:624
優酷上傳視頻需要多久 發布:2024-04-25 18:33:05 瀏覽:675
inf12編譯器 發布:2024-04-25 18:15:39 瀏覽:99
撲克總督3安卓哪裡下載 發布:2024-04-25 18:10:02 瀏覽:395