找不到crti.o:没有这样的文件或目录


19

当我想在我的电脑上制作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

我收到其他错误,对makeinfo不存在,这我的系统上。这些步骤无法解决您的错误。
gertvdijk

Answers:


13

这是在启动板中报告的错误,但没有解决方法:

在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查找库的新位置。

谢谢。向伊恩·布克劳(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

这个问题解决了。但是我得到新的错误。请查看原始帖子
mahmood 2013年

2
谢谢,但这不是第二个问题的解决方案。我发现我不得不./configure --disable-multilib根据gcc.gnu.org/ml/gcc-help/2009-05/msg00238.html从头开始并进行重建
mahmood 2013年

不适用于Ubuntu 16.04和我的版本。
Niklas

我面临着同样的问题,但是在运行make install的最后一步。我确实设置了LIBRARY_PATH,但无济于事!!任何帮助表示赞赏
faizan

1
使用完后,我遇到了一个问题“当前目录不应位于LIBRARY_PATH中,这是由先前为空的LIBRARY_PATH引起的。因此,请使用export LIBRARY_PATH="/usr/lib/x86_64-linux-gnu${LIBRARY_PATH+:$LIBRARY_PATH}"or(如果您知道它为空)export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
Flamefire '18


0

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


默认情况下是。但是您可以使用--with-multilib-list = m64选项将./configure的版本限制为仅64位。当我构建GCC 4.8.5时,它为我工作。我在stackoverflow.com/a/55703805/4807875上的答案(第3部分)中也提到了它。
亚历山大·萨莫洛夫

0

我还在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位上


1
要使用较旧的gcc / g ++,您必须忘记Ubuntu,因为在较新版本的Ubuntu上,您无法完全解决问题,而另一方面,不再支持较旧的Ubuntu。您必须使用基于rehdat的系统。Centos 6.3没问题
mahmood 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.