如何解决链接器错误 "cannot find crt1.o"?

178

我有一个用来进行开发的 Debian 虚拟系统。今天我想尝试 llvm/clang。安装 clang 后,我无法使用 gcc 编译我的旧 c 项目。

这是错误信息:

/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

我已经卸载了clang,但仍然无法工作。是否有人有任何想法如何解决这个问题?


7
尝试安装libc0.1-dev - Michas
1
对于Mac,请参见:https://dev59.com/6nM_5IYBdhLWcg3wdy_z#16102800 - kenorb
可能是Missing crt1 and crti when crosscompiling的重复问题。 - user2284570
这是在Launchpad上报告的一个BUG,但有一个解决方法: http://askubuntu.com/questions/251978/cannot-find-crti-o-no-such-file-or-directory - Roman
21个回答

3

./configure --disable-multilib

这适用于它。


1
在CentOs 5.4上遇到了这个问题。注意到lib64包含crt*.o文件,但是lib没有。通过yum安装了glibc-devel,安装了i386位,解决了我的问题。

1
在Alpine Linux上,你需要安装libc-dev包。
$ apk add libc-dev

0
一个神奇的命令:
sudo apt install build-essential

即使在树莓派上,也为我解决了所有问题。


0

当我交叉编译i686-cm-linux-gcc时,我也遇到了相同的编译错误。

下面的编译选项解决了我的问题。

$ i686-cm-linux-gcc a.c --sysroot=/opt/toolchain/i686-cm-linux-gcc

注意:sysroot应指向编译器目录,其中usr/include可用。
在我的情况下,工具链安装在/opt/toolchain/i686-cm-linux-gcc目录中,usr/include也在同一目录中可用。

0
今天我遇到了同样的问题,通过安装推荐的软件包解决了它: libc6-dev-mipsel-cross libc6-dev-mipsel-cross, libc-dev-mipsel-cross

这个方法有效:

sudo apt-get install libc6-dev-mipsel-cross

0

看起来您已经通过包管理器使用--no-install-recommends选项安装了交叉编译器,因此一些(用于交叉编译的)软件包未被安装。为解决问题,请在https://packages.debian.org/中搜索缺失的文件,以找出提供它们的软件包。

sudo apt install libc6-dev-arm64-cross libc6-arm64-cross

0
我是这样解决的:
1)使用find -name ctr1.o查找ctr1.o和ctri.o文件。
在我的电脑上,我得到了以下结果:$/usr/lib/i386-linux/gnu 2)将该路径添加到PATH(也是LIBRARY_PATH)环境变量中(为了查看名称,请在终端中键入env命令)。
$PATH=/usr/lib/i386-linux/gnu:$PATH
$export PATH

为避免混淆,$PATH=/usr/lib/i386-linux/gnu:$PATH $export PATH 这一行实际上是: - pac88

-1
在我的情况下,crti.o错误是由于Matlab的执行路径配置引起的。 例如,如果您之前没有设置执行目录的路径,则无法执行文件。 要做到这一点:文件> setPath,添加您的目录并保存。

-1

使用 gcc -B lib_path_containing_crt?.o


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接