12.10 32 位

12.10 32 位

当我想制作 gcc 4.1.2 (ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-4.1.2/gcc-4.1.2.tar.bz2) 在我的 ubuntu 12.04 (x86_64) 上。当前活动的 gcc 是 4.6.2。我做了:

./configure

然后

make

但是我得到了这个错误

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

在网上搜索后发现, 的位置似乎有问题crti。这些文件在系统上可用

# find /usr/ -name crti*
/usr/lib32/crti.o
/usr/lib/x86_64-linux-gnu/crti.o
/usr/lib/debug/usr/lib/x86_64-linux-gnu/crti.o

还安装了 libc6 devel 包

# dpkg -l | grep libc6
ii  libc6                                  2.15-0ubuntu10.3                          Embedded GNU C Library: Shared libraries
ii  libc6-dbg                              2.15-0ubuntu10.3                        Embedded GNU C Library: detached debugging symbols
ii  libc6-dev                              2.15-0ubuntu10.3                        Embedded GNU C Library: Development Libraries and Header Files
ii  libc6-dev-i386                         2.15-0ubuntu10.3                        Embedded GNU C Library: 32-bit development libraries for AMD64
ii  libc6-i386                             2.15-0ubuntu10.3                        Embedded GNU C Library: 32-bit shared libraries for AMD64
ii  libc6-pic                              2.15-0ubuntu10.3                        Embedded GNU C Library: PIC archive library

我该如何修复它?

更新:

添加这些之后

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH 

这个问题已经解决了。但是现在我得到了

/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.a when searching for -lc
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/x86_64-linux-gnu/crti.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/x86_64-linux-   gnu/crtn.o' is incompatible with i386 output
collect2: ld returned 1 exit status

答案1

这是一个漏洞在启动板中报告,但有一个解决方法:

在32位平台编译64位程序:

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH

对于 32 位本机:

LIBRARY_PATH=/usr/lib32:$LIBRARY_PATH
export LIBRARY_PATH

.bashrc 文件中的内容(或从控制台运行)足以让 GCC 找到库的新位置。

感谢 Iain Buclaw (ibuclaw) 指出正确的方向。

12.10 32 位

hhlp@hhlp:~$ sudo find /usr/ -name crti*
/usr/lib/i386-linux-gnu/crti.o
hhlp@hhlp:~$ 

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

12.10 64 位

hhlp@hhlp:~$ sudo find /usr/ -name crti*
/usr/lib/x86_64-linux-gnu/crti.o
hhlp@hhlp:~$ 

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH

答案2

就我而言,我根本Ubuntu 16.04没有:crti.o

$ find /usr/ -name crti*

所以我安装了开发者包:

sudo apt-get install libc6-dev

答案3

从上游源在 x86-64 上构建 GCC 4.8 时,您会遇到需要同时构建 32 位和 64 位库的问题(除非禁用多库)。在这种情况下,您需要添加路径/usr/lib/x86_64-linux-gnu/usr/lib32

答案4

我也在我的 Ubuntu 机器上构建了旧版本的 gcc(4.6.3 机器上的 3.4.6)
我尝试了@mahmood 的 --disable-multilib 解决方案,但是我需要使用 gcc 3.4.6 的包似乎也需要 32 位库。

因此我将 64 位和 32 位库都添加到 LIBRARY_PATH

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/lib32:$LIBRARY_PATH 
export LIBRARY_PATH 

哦,我使用的是 Ubuntu 12.04 64 位

相关内容