bits / spin-lock.h:没有这样的文件或目录

时间:2017-03-31 09:18:04

标签: ubuntu libc

我构建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的配置信息?

1 个答案:

答案 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
  • 显然, libc不支持调试版本(非优化,即):glibc cannot be compiled without optimization(请参阅here)。即使-O1也不受支持。
  • --enable-add-ons=libidn:默认查找'附加组件'在所有子目录中(相当于设置--enable-add-ons=fbtl,libidn,libpthread,使用v2.24)。如果我在列表中添加fbtllibpthread,我会收到错误,即: 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
  • 如何,都会构建libpthread

附加说明:

  • 我使用--prefix=/dbg以便我不会在系统库之上安装(我很满意使用LD_LIBRARY_PATH来查找我的依赖项)。如果将其保留为默认值(/ usr / local)
  • ,则必须设置--disable-sanity-checks
  • MAKEINFO=:稍后会在(make install
  • 期间避免出现小错误

此外,即使make check似乎有效,我删除的一些标记也很重要。我不是建立glibc的专家。