无法编译内核头文件(libc6-amd64依赖项)

时间:2015-11-19 20:03:42

标签: c++ c linux gcc linux-kernel

编辑:请阅读更新。

我无法使用boost库编译某些程序,我被告知这是一个编译器错误。我从源代码编译了GCC-5.1.0并将其放在/opt/gcc-5.1.0/中,并将/opt/gcc-5.1.0/bin添加到$PATH。我还必须从内核4.3.0降级到4.2.6,以便VMWare工作站正常工作。

我无法安装我写的内核编译脚本生成的内核头文件:
dpkg -i /kernel/Kernel4.2.6/linux-headers-4.2.6.deb

输出:

Unpacking linux-headers-4.2.6 (1.0.0) ...
dpkg: dependency problems prevent configuration of linux-headers-4.2.6:
 linux-headers-4.2.6 depends on libc6-amd64 (>= 2.14).

话虽如此,运行dpkg -l "libc6*"会产生以下结果:

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
ii  libc6:amd64    2.19-18+deb8 amd64        GNU C Library: Shared libraries
ii  libc6:i386     2.19-18+deb8 i386         GNU C Library: Shared libraries
rc  libc6-amd64    2.19-18+deb8 i386         GNU C Library: 64bit Shared libra
ii  libc6-dev:amd6 2.19-18+deb8 amd64        GNU C Library: Development Librar
ii  libc6-dev:i386 2.19-18+deb8 i386         GNU C Library: Development Librar
in  libc6-dev-amd6 <none>       i386         (no description available)
ii  libc6-dev-i386 2.19-18+deb8 amd64        GNU C Library: 32-bit development
ii  libc6-i386     2.19-18+deb8 amd64        GNU C Library: 32-bit shared libr
ii  libc6-i686:i38 2.19-18+deb8 i386         GNU C Library: Shared libraries [
rc  libc6-x32      2.19-18+deb8 amd64        GNU C Library: X32 ABI Shared lib
un  libc6.1        <none>       <none>       (no description available)
un  libc6.1-dev    <none>       <none>       (no description available)

依赖关系似乎符合要求,不是吗?

我无法运行apt-get install libc6-dev-amd64因为它产生了:

dpkg: error processing archive /var/cache/apt/archives/libc6-dev-amd64_2.19-18+deb8u1_i386.deb (--unpack):
 trying to overwrite '/usr/include/sys/xattr.h', which is also in package libc6-dev-i386 2.19-18+deb8u1

但是,从缓存中运行dpkg --force-overwrite -d /var/cache/apt/archives/libc6-dev-amd64_2.19-18+deb8u1_i386.deb似乎已经安装了它。 dpkg -l "libc6*"现在产生:

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
ii  libc6:amd64    2.19-18+deb8 amd64        GNU C Library: Shared libraries
ii  libc6:i386     2.19-18+deb8 i386         GNU C Library: Shared libraries
ii  libc6-amd64    2.19-18+deb8 i386         GNU C Library: 64bit Shared libra
ii  libc6-dev:amd6 2.19-18+deb8 amd64        GNU C Library: Development Librar
ii  libc6-dev:i386 2.19-18+deb8 i386         GNU C Library: Development Librar
ii  libc6-dev-amd6 2.19-18+deb8 i386         GNU C Library: 64bit Development 
ii  libc6-dev-i386 2.19-18+deb8 amd64        GNU C Library: 32-bit development
ii  libc6-i386     2.19-18+deb8 amd64        GNU C Library: 32-bit shared libr
ii  libc6-i686:i38 2.19-18+deb8 i386         GNU C Library: Shared libraries [
ii  libc6-udeb     2.19-0ubuntu amd64        Embedded GNU C Library: Shared li
rc  libc6-x32      2.19-18+deb8 amd64        GNU C Library: X32 ABI Shared lib
un  libc6.1        <none>       <none>       (no description available)
un  libc6.1-dev    <none>       <none>       (no description available)

但是,我仍然无法安装具有相同错误的内核头文件。

作为一个似是而非的相关问题,在编译一个非常简单的程序检查依赖项之后:

#include <cstdlib>
#include <memory>
#include <boost/asio.hpp>
#include <linux/limits.h>

int main(int argc, char **argv){
    return 0;
}

似乎编译正确,但运行./a.out会产生:

./a.out: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./a.out)
./a.out: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./a.out)

更新 似乎没有任何效果。我已尝试安装libc6-dev和其他eglib库的实验版本,现在我无法卸载,更改或对其执行任何操作,以免我遇到删除以下软件包:

WARNING: The following essential packages will be removed.
This should NOT be done unless you know exactly what you are doing!
  apt libapt-pkg4.12 (due to apt) libc6 (due to apt) libgcc1 (due to apt)
  libstdc++6 (due to apt) debian-archive-keyring (due to apt) gnupg (due to
  apt) base-files base-passwd libdebconfclient0 (due to base-passwd) bash
  debianutils (due to bash) dash (due to bash) libncurses5 (due to bash)
  libtinfo5 (due to bash) bsdutils libsystemd0 (due to bsdutils) coreutils
  libacl1 (due to coreutils) libattr1 (due to coreutils) libselinux1 (due to
  coreutils) dpkg (due to dash) diffutils libbz2-1.0 (due to dpkg) liblzma5
  (due to dpkg) zlib1g (due to dpkg) tar (due to dpkg) e2fsprogs e2fslibs (due
  to e2fsprogs) libblkid1 (due to e2fsprogs) libcomerr2 (due to e2fsprogs)
  libss2 (due to e2fsprogs) libuuid1 (due to e2fsprogs) util-linux (due to
  e2fsprogs) findutils grep libpcre3 (due to grep) gzip hostname init
  systemd-sysv (due to init) libc-bin login libaudit1 (due to login) libpam0g
  (due to login) libpam-runtime (due to login) libpam-modules (due to login)
  mount libmount1 (due to mount) libsmartcols1 (due to mount) ncurses-bin
  perl-base sed sysvinit-utils startpar (due to sysvinit-utils) initscripts
  (due to util-linux) tzdata (due to util-linux) libslang2 (due to util-linux)

显然我不想卸载这些,但我需要重新安装libc6。

2 个答案:

答案 0 :(得分:1)

如果使用g ++版本5.1.0编译应用程序,编译器将知道它自己的libstdc++.so的路径。 (在/ opt /中)。

但是您的应用程序(a.out)将在LD_LIBRARY_PATH中查找libstdc++.so.6

您可以像$ export LD_LIBRARY_PATH=/opt/gcc-5.1.0/lib:$LD_LIBRARY_PATH && ./a.out

一样运行a.out

答案 1 :(得分:0)

关于您遗失的{crt1.o,crti.o,-lc = libc.so,crtn.o}:这些是使用$FileCount = (Get-ChildItem C:\MainFolder).count Get-ChildItem C:\MainFolder -r | Foreach -Begin {$i = $j = 0} -Process { if ($i++ % $FileCount -eq 0) { $dest = "C:\Child$j" md $dest $j++ } Move-Item $_ $dest } 进行编译所需的32位文件

→→http://www.cyberciti.biz/tips/compile-32bit-application-using-gcc-64-bit-linux.html

gcc -m32