我构建glibc失败了,并显示消息:
../ libpthread / sysdeps / pthread / bits / mutex.h:34:30:致命错误:bits / spin-lock.h:没有这样的文件或目录
我的系统是ubuntu 16.04 LTS。 我使用命令“apt-get source libc6-dev”得到了源代码。 使用命令构建: ../glibc-2.23/configure -CFLAGS =' - g -O0 -U_FORTIFY_SOURCE -fno-stack-protector' - with-headers = / usr / include
为什么它失败了,有没有办法获取我的电脑中安装的glibc的配置信息?
答案 0 :(得分:0)
注意:我在Ubuntu 17.04上。
我 做了非常相似的事情:
apt source libc6
cd glibc-2.24
dpkg-buildpackage # found in package dpkg-dev (which depends on a bunch of Perl scripts in libdpkg-perl)
这个命令应该构建一个可安装的软件包(但是我没耐心等待,因为它迭代了几个我认为不需要的软件包配置)。
我想要做的是使用以下任一方法使用调试信息来调整libc:
dpkg-buildpackage
export DEB_BUILD_OPTIONS=nostrip,noopt
或debuild
(可在包devscripts
中找到),请参阅here。......但这是另一个故事。
dpkg-buildpackage
命令会发出日志,在这些日志中,我们会找到所使用的configure命令(可读性换行符):
CC="x86_64-linux-gnu-gcc-6 -no-pie -fno-PIE" \
CXX="x86_64-linux-gnu-g++-6 -no-pie -fno-PIE" \
MIG="x86_64-linux-gnu-mig" \
AUTOCONF=false \
MAKEINFO=: \
/usr/src/glibc-2.24/configure \
--host=x86_64-linux-gnu \
--build=$configure_build \
--prefix=/usr \
--enable-add-ons=libidn,"" \
--without-selinux \
--enable-stackguard-randomization \
--enable-obsolete-rpc \
--with-pkgversion="Ubuntu GLIBC 2.24-9ubuntu2" \
--with-bugurl="https://bugs.launchpad.net/ubuntu/+source/glibc/+bugs" \
--with-headers=/usr/src/glibc-2.24/debian/include \
--enable-kernel=2.6.32 \
--with-selinux \
--enable-systemtap \
--enable-multi-arch
经过一些实验,我能够减少命令所需的基本标志数量,如下所示:
# same as above
apt source libc6
cd glibc-2.24
# regenerate the configure script (not essential, but doesn't hurt)
touch configure.ac
autoconf
# extra setup (sets-up kernel and library headers for use with --with-headers)
make -f ./debian/rules
# cannot build in source tree anyways
mkdir -p build and cd build
MAKEINFO=: CFLAGS="-g -O2" CXXFLAGS="-g -O2" ../configure --prefix=/dbg --with-headers=/usr/src/glibc-2.24-git/debian/include --enable-add-ons=libidn
make -j 4
make install DESTDIR=$(pwd)/install # testing installation
make check # 'actual' testing
注意:
make -f ./debian/rules
的调用是必要,以便能够使用--with-headers
glibc cannot be compiled without optimization
(请参阅here)。即使-O1
也不受支持。--enable-add-ons=libidn
:默认查找'附加组件'在所有子目录中(相当于设置--enable-add-ons=fbtl,libidn,libpthread
,使用v2.24)。如果我在列表中添加fbtl
或libpthread
,我会收到错误,即:
No rule to make target '/usr/src/glibc-2.24-git/build/bits/stdio_lim.st', needed by '/usr/src/glibc-2.24-git/build/bits/stdio_lim.h'
--enable-add-ons
附加说明:
--prefix=/dbg
以便我不会在系统库之上安装(我很满意使用LD_LIBRARY_PATH
来查找我的依赖项)。如果将其保留为默认值(/ usr / local)--disable-sanity-checks
MAKEINFO=:
稍后会在(make install
)此外,即使make check
似乎有效,我删除的一些标记也很重要。我不是建立glibc的专家。