【问题标题】:(build) gcc/g++ with 32 bits libraries under ubuntu 15.04 (64-bits PC (AMD64) desktop image)(build) gcc/g++ 与 ubuntu 15.04 下的 32 位库(64 位 PC (AMD64) 桌面映像)
【发布时间】:2015-12-14 13:58:56
【问题描述】:

我在 VMWare 映像中从 64 位 PC (AMD64) desktop image 安装了 Ubuntu 15.04 64 位(我在 win7 64 位下),并尝试在其上构建 gcc 5.2。在配置步骤中,我遇到了一些错误,例如:

/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
collect2: ld returned 1 exit status

我猜它们与 32 位库的明显缺失有关。同样,使用 ubuntus g++ 和 -m32 选项编译会导致

/usr/include/c++/4.9/iostream:38:28: fatal error: bits/c++config.h: No such file or directory
#include <bits/c++config.h>

寻找 c++config.h 给了我这个:

/usr/include/x86_64-linux-gnu/c++/4.9/bits/c++config.h

我怀疑这 32 个库安装错误,因为我有一个文件夹 /usr/lib32,只有这个:

xx@xx-ubuntu1504vm:/usr/lib32$ ls -l
total 1372
drwxr-xr-x 2 root root  12288 août  20 11:00 gconv
lrwxrwxrwx 1 root root     14 mars   6  2015 libform.so.5 -> libform.so.5.9
-rw-r--r-- 1 root root  68012 mars   6  2015 libform.so.5.9
-rw-r--r-- 1 root root 112708 avril 15 04:06 libgcc_s.so.1
lrwxrwxrwx 1 root root     14 mars   6  2015 libmenu.so.5 -> libmenu.so.5.9
-rw-r--r-- 1 root root  34548 mars   6  2015 libmenu.so.5.9
lrwxrwxrwx 1 root root     15 mars   6  2015 libpanel.so.5 -> libpanel.so.5.9
-rw-r--r-- 1 root root  13584 mars   6  2015 libpanel.so.5.9
lrwxrwxrwx 1 root root     19 avril 14 22:15 libstdc++.so.6 ->     libstdc++.so.6.0.20
-rw-r--r-- 1 root root 975360 avril 14 22:51 libstdc++.so.6.0.20
lrwxrwxrwx 1 root root     13 mars   6  2015 libtic.so.5 -> libtic.so.5.9
-rw-r--r-- 1 root root  63160 mars   6  2015 libtic.so.5.9
lrwxrwxrwx 1 root root     13 oct.  27  2014 libz.so.1 -> libz.so.1.2.8
-rw-r--r-- 1 root root 108080 oct.  27  2014 libz.so.1.2.8

在里面。

我能做什么?

【问题讨论】:

  • google 的关键字是 multiarch。
  • @MarcGlisse 那么,amd64(我的 ubuntu 架构)和x86_64-apple-darwin14.5.0(我的 mac os x 架构)之间有什么区别,这说明如果我跟随你,我需要构建 gcc在 ubuntu 下使用--enable-multiarch,在 mac os yosemite 下没有它能够编译针对 32 位架构的代码?
  • 苹果不关心空间,他们乐于安装很胖的东西。 Ubuntu 认为你的硬盘应该避免无用的东西。如果您想使用 32 位(为什么?),您可以启用 multiarch 并在您的系统上安装 32 位软件包。如果你想要一个 64 位的 gcc,你可以使用 --disable-multilib 构建。
  • @MarcGlisse 好的,这是有道理的。 (我对这一切都很陌生。)启用 multiarch 对您来说究竟意味着什么?至于安装 32 位软件包,据我所知,据我所知,在 ubuntu 15.04 中没有“犹太洁食”方式。

标签: ubuntu gcc virtual-machine 32bit-64bit ubuntu-15.04


【解决方案1】:

64 位位/c++config.h 文件是通过安装 g++-multilib 包在 32 位系统上提供的(反之亦然),因此您需要使用软件中心、Synaptic 安装该包,或通过终端使用

sudo apt-get install g++-multilib

这只是一个依赖包,它解析为默认 gcc/g++ 版本的 g++-4.8-multilib,进而依赖于 lib64stdc++-4.8-dev(32 位上的 64 位编译)或 libx32stdc++-4.8- dev(64 位上的 32 位编译)- 正是这些包含实际的头文件。

对于普通的 C 编译器 gcc,有一组等效的包。

【讨论】:

    猜你喜欢
    • 2011-12-03
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 2017-03-11
    • 2013-10-23
    • 2015-09-14
    相关资源
    最近更新 更多