你如何构建旧的 gcc 版本?找不到关于 crti.o 的错误

Mat*_*att 10 11.10 gcc

如何在 Ubuntu 11.10 上构建较旧的 gcc(特别是 4.5.2)并避免有关“/usr/bin/ld:找不到 crti.o:没有此类文件或目录”的错误?

我做了一些挖掘,发现了几个类似的项目,但没有一个能真正解决我的问题:

  • 我已经验证了我所有的包(libc6-dev 等)都根据这个问题重新安装
  • 我已经验证 crti.o 存在于 /usr/lib32 和 /usr/lib/x86_64-linux-gnu 中,并且我的 ld.so.conf 配置为在这些目录中查找
  • 我已经验证在我的 make 调用前加上 LIBRARY_PATH=/usr/lib/x86_64-linux-gnu 有效,但想避免这种情况(它成为 makefile 中的一个分歧点)
  • 我用 --with-build-sysroot 尝试了各种方法,但没有成功(阅读:也许我只是不知道要设置的正确标志)
  • 使用 strace 运行时(根据这个答案),我可以看到对 crti.o 的引用:

    13240 open(“crti.o”,O_RDONLY)= -1 ENOENT(没有这样的文件或目录)

谢谢!

ams*_*ams 10

即使是非常新版本的 GCC 也会因该消息而失败。这是因为新的 Debian/Ubuntu 版本(将)支持 multiarch(即在一个文件系统中为多台机器安装二进制文件),所以库已从标准位置移开。

有GCC补丁来修复它在这里(尚未批准的最终版本,但正确的Ubuntu),他们可能适用于旧的GCC没有太多的精力,也许。我认为您需要使用--enable-multiarch或其他东西来配置 GCC 。

同时,创建软链接是一个很好的修复:

cd /usr/lib
ln -s x86_64-linux-gnu/crt*.o .
Run Code Online (Sandbox Code Playgroud)

(文件夹名称在 32 位安装上会有所不同)。

希望有帮助。


小智 7

我有同样的问题。使从符号链接/usr/libs/crt?.o/usr/lib/x86_64-linux-gnu/crt?.o解决了这个问题对我来说。