2017-01-02 78 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