您如何建立较旧的gcc版本?找不到关于crti.o的错误


10

如何在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配置为在这些目录中查找
  • 我已经验证可以在LIBRARY_PATH = / usr / lib / x86_64-linux-gnu之前进行make调用,但是想避免这种情况(它成为makefile中的分歧点)
  • 我已经使用--with-build-sysroot尝试了各种方法,但是没有成功(阅读:也许我只是不知道要设置的正确标志)
  • 当使用strace运行时(按照此答案),我可以看到对crti.o的简单引用:

    13240 open(“ crti.o”,O_RDONLY)= -1 ENOENT(无此类文件或目录)

谢谢!

Answers:


7

我有同样的问题。通过建立符号链接/usr/libs/crt?.o 可以/usr/lib/x86_64-linux-gnu/crt?.o为我解决问题。


确实可以,是的。我一直希望有一个解决方案,它更像是调整gcc安装而不是破坏底层文件结构,但是……
Matt

在我的情况下,我想补充一点,我重新编译了glibc和GCC,但是我忘记摆脱了/ usr / bin /下一个较旧的slackware-gcc变体。当我删除后者时,我可以再次编译某些东西(例如再次编译gcc)。
shevy

10

即使是非常新版本的GCC,也会出现该消息。这是因为新的Debian / Ubuntu版本(将)支持多体系结构(即在一个文件系统中为多台机器安装二进制文件),因此这些库已从标准位置移开了。

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

同时,创建软链接是一个很好的解决方案:

cd /usr/lib
ln -s x86_64-linux-gnu/crt*.o .

(在32位安装中,文件夹名称将有所不同)。

希望能有所帮助。


感谢您关于它是多体系结构的观点。我希望能够解决“为什么”停止工作的问题。
马特

2

我通过一些可能对您有用的解决方法解决了此问题。

首先,使用构建GCC LIBRARY_PATH=/usr/lib/x86_64-linux-gnu,以便构建引导过程知道在哪里可以找到crt?.o起始文件。

然后,不必crt?.o/usr/lib影响整个系统的位置进行符号链接,而是可以将这三个文件符号链接到与可执行文件安装${prefix}/lib/gcc/...目录相对应的${prefix}/bin目录gcc中。实际上,这几乎是其开始文件搜索路径的顶部,因此它将找到它们-但它们不会影响其他任何东西。

就我而言,放置它们的特定目录是lib/gcc/x86_64-unknown-linux-gnu/4.3.2/; 您可以找到合适的文件,因为它已经包含其他文件crtbegin.o


1

我在Ubuntu精确x86_64上构建了GCC 4.1.2。正如您所做的那样,我查看了最后一个命令“ xgcc”的痕迹,以寻找32位c运行时,即grep-ped / 32 /,如下所示。我的C运行时在/ usr / lib32中,它由libc6-dev-i386软件包提供。

fgrep /32/ strace-output.txt | grep /usr/lib | head -1
access("/usr/lib/gcc/x86_64-unknown-linux-gnu/4.1.2/32/crti.o", R_OK) = -1 ENOENT (No such file or directory)

因此,我在xgcc寻找的目录中创建了crt?.o符号链接。

sudo mkdir -p /usr/lib/gcc/x86_64-unknown-linux-gnu/4.1.2/32
cd /usr/lib/gcc/x86_64-unknown-linux-gnu/4.1.2/32
sudo ln -s /usr/lib32/crt1.o 
sudo ln -s /usr/lib32/crtn.o 
sudo ln -s /usr/lib32/crti.o 

我用它成功构建了GCC 4.1.2。

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.