找不到 crti.o:没有那个文件或目录

mah*_*ood 22 gcc 12.04

当我想在我的电脑上制作 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
Run Code Online (Sandbox Code Playgroud)

然后

make
Run Code Online (Sandbox Code Playgroud)

但是我收到这个错误

/usr/bin/ld: cannot find crti.o: No such file or directory
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

网上搜了一下,好像位置有问题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
Run Code Online (Sandbox Code Playgroud)

还安装了 libc6 开发包

# 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
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

更新:

添加这些后

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH 
Run Code Online (Sandbox Code Playgroud)

那问题就解决了。但是现在我得到

/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
Run Code Online (Sandbox Code Playgroud)

hhl*_*hlp 16

这是启动板中报告的BUG,有一个解决方法:

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

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

对于 32 位本机:

LIBRARY_PATH=/usr/lib32:$LIBRARY_PATH
export LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

在您的 .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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但这不是第二个问题的解决方案。我发现我必须做`./configure --disable-multilib`并根据http://gcc.gnu.org/ml/gcc-help/2009-05/msg00238.html从头开始重建谢谢你的帮助 (2认同)

Eug*_*kov 6

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

$ find /usr/ -name crti*
Run Code Online (Sandbox Code Playgroud)

所以我安装开发者包:

sudo apt-get install libc6-dev
Run Code Online (Sandbox Code Playgroud)