https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105487
Bug ID: 105487 Summary: Sysroots without 32bit components cause mysterious errors Product: gcc Version: 11.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: bootstrap Assignee: unassigned at gcc dot gnu.org Reporter: psmith at gnu dot org Target Milestone: --- I first reported this issue here: https://gcc.gnu.org/pipermail/gcc/2020-August/233361.html I said I would file a bug but I don't see any evidence that I ever did so. It's still present in GCC 11.3. It actually isn't limited to bootstrap, either: if you set to a sysroot that doesn't contain any 32bit values, and thus doesn't contain the /sysroot/usr/lib directory at all but only has /sysroot/usr/lib64, then you can't compile GCC itself against that sysroot and, if you have a built GCC, you can't compile programs against that sysroot. I have hacked a workaround by creating an empty /sysroot/usr/lib directory in my sysroot, but it took me the better part of a day to figure out the problem... even though I had already figured this out less than two years ago. It would be nice to avoid the problem. While building GCC, you will get this relatively obscure error trying to build libgcc_s.so: ld: error: cannot open crti.o: No such file or directory ld: error: cannot open crtn.o: No such file or directory ld: error: cannot find -lc If you debug it, you'll see that /sysroot/usr/lib64/crti.o does exist (same with the others) so you will be confused. If you look more carefully and add -v to see search paths, you'll find that the path we use to locate 64bit content is a relative path to the /sysroot/usr/lib directory: ... -L/sysroot/usr/lib/../lib64 instead using the direct path: ... -L/sysroot/usr/lib64 So, if you don't HAVE a /sysroot/usr/lib directory (because you aren't supporting 32bit builds and have no need for it) your builds will fail.