2

我正在尝试从 Cyclone 编程语言的源编译器构建。我正在运行 32 位 Ubuntu 12.04,默认安装 GCC 4.6.3。

但是由于 bootstrap 实用程序崩溃,make 失败。为了解决这个问题,我正在尝试安装较旧的 GCC 版本。

我已经修补了 /etc/apt/sources.list 并使用 apt-get 安装了 gcc-3.3 和 g++-3.3。但是配置脚本在强制使用 GCC 3.3 时会失败:

$ export CC=gcc-3.3
$ export CXX=g++-3.3
$ ./configure
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
checking for gcc... gcc-3.3
checking for C compiler default output file name... configure: error: C compiler cannot create executables
See `config.log' for more details.

config.log 显示:

...
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
/usr/bin/ld: cannot find -lgcc_s
...

ld 的版本是 2.22

4

3 回答 3

2

我也有同样的问题。libc6-dev 软件包提供了 crt1.o 文件,但它安装在 gcc 的非标准目录中。这是为了在同一主机上支持 32 位和 64 位程序。

为了解决这个问题,我设置了以下环境变量:

导出 LIBRARY_PATH=/usr/lib/i386-linux-gnu

于 2012-07-17T18:55:21.327 回答
1

apt-file search crt1.o显示哪些包包含此文件。如果它不打印任何内容,请运行apt-file update一次。

于 2012-05-21T08:51:46.223 回答
0

正如 michel 所提到的,您可以这样做来让旧的 GCC 引导:

export LIBRARY_PATH=/usr/lib/i386-linux-gnu

crt1.o无论文件在您的系统上的哪个位置——在我的系统上,它都在/usr/lib32.

然后,一旦你构建了一个工作的 GCC,你可以将crt1.o, crti.o, 和符号链接(或复制)crtn.o到新构建的编译器的目录中,并且在使用时${prefix}/lib/gcc/...不需要设置。LIBRARY_PATH寻找crtstart.o文件或类似的东西,这是放置符号链接的正确目录。

于 2012-07-20T04:39:53.993 回答