2017-01-02 81 views
1

我想僅編譯glibc附帶的許多庫中的一個。僅編譯glibc的一部分

即我所需要的是librt庫(librt.a)的靜態版本。有沒有辦法告訴configure/make來做到這一點?

現在,我已經設置了一個進程,在運行configure時設置特定的CFLAGS,然後編譯整個glibc,並在編譯後簡單地提取librt.a - 但肯定看起來像99%的浪費和1%的收益。

編輯:

建議的命令make rt/librt.a產生

make -r PARALLELMFLAGS="" -C .. objdir=`pwd` rt/librt.a 
make[1]: Entering directory '/data/soft/glibc-2.24' 
make[1]: *** No rule to make target 'rt/librt.a'. Stop. 
make[1]: Leaving directory '/data/soft/glibc-2.24' 
make: *** [Makefile:9: rt/librt.a] Error 2 

,當我看着整個化妝運行的輸出,librt建像

make subdir=rt -C rt ..=../ subdir_lib 

不幸的是,這個命令也不會產生好結果:

$ make subdir=rt -C rt ..=../ subdir_lib 
make: Entering directory '/data/soft/glibc-2.24/build-tree/rt' 
make: *** No rule to make target 'subdir_lib'. Stop. 
make: Leaving directory '/data/soft/glibc-2.24/build-tree/rt' 

有趣的是,當 - 一個完整的化妝運行後 - 我嘗試使用推薦的命令,我得到

$ make -j 4 rt/librt.a 
make: 'rt/librt.a' is up to date. 

回答

1

這應做到:

mkdir build && cd build && ../configure $your_flags && 
make -j20 rt/librt.a 
1

glibc的構建是objdir爲中心變量。將其導出到您運行配置的路徑,然後您可以在surce子目錄中使用make

例如:

cd .../glibc/ 
mkdir build 
cd build 
../configure --prefix=/usr 
export objdir=$PWD 
cd ../rt 
make -j4 
+0

需要配置在linux下--prefix,但即使我給的是, 編譯與此錯誤'結束使:***沒有規則,使目標 「/ data/glibc-2.24/build/csu/stamp.o',由 '/data/glibc-2.24/build/libc.a'需要。停下來。「如果我然後進入csu dir並在那裏發佈一個make,那就貫穿始終。如果 - 之後 - 我返回到rt目錄,並繼續make,我得到: '../sysdeps/unix/sysv/linux/x86_64/cancellation.S:69:錯誤:無效的操作數(* UND *和* UND *部分)爲「|」' – Perlator