Opened 11 years ago
Last modified 3 months ago
#42375 assigned defect
i386-elf-gcc error while compiling: cannot find crt0.o
Reported by: | waves_no.13@… | Owned by: | |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | ports | Version: | 2.2.1 |
Keywords: | Cc: | mojca (Mojca Miklavec), ryandesign (Ryan Carsten Schmidt), raimue (Rainer Müller), cooljeanius (Eric Gallager), superobertking (robertking) | |
Port: | i386-elf-gcc |
Description (last modified by mf2k (Frank Schima))
Hello,
I'm trying to cross compile a simple helloworld.c program on my Mac for an embedded Linux OS. Evrytime I try i get the following error:
xxxxx-MacBook-Pro:Hallo_Welt f0xy$ i386-elf-gcc -g -Wall -o test main.c /opt/local/lib/gcc/i386-elf/4.7.2/../../../../i386-elf/bin/ld: cannot find crt0.o: No such file or directory collect2: Fehler: ld gab 1 als Ende-Status zurück
As far as I understand crt0.o is the C runtime libraray and ld the linker, so it's a missing file?...
Is there a workaround to fix this? It's my first time working with cross compilers and on an unix based OS.
Thanks a lot for any responds that might help!
Change History (15)
comment:1 Changed 11 years ago by mf2k (Frank Schima)
Description: | modified (diff) |
---|---|
Keywords: | i386-elf-gcc cannot find crt0.o removed |
Owner: | changed from macports-tickets@… to stepan@… |
comment:2 Changed 7 years ago by kurthindenburg (Kurt Hindenburg)
Owner: | stepan@… deleted |
---|---|
Status: | new → assigned |
comment:3 Changed 5 years ago by ryandesign (Ryan Carsten Schmidt)
Cc: | mojca ryandesign added |
---|
Mojca, does this port work for you? You committed updates to this port last year, but I am also encountering the problem reported in the problem description six years ago; I cannot compile a simple hello world program.
comment:4 follow-up: 6 Changed 5 years ago by mojca (Mojca Miklavec)
While I did try to clean up some gcc-related mess every now and then, I strongly suspect that I only ever tried building the port, while I didn't actually try using the generated binary to compile a hello-world program. I use some other cross-compilers, just not this one. (I'm not currently on my mac.)
comment:5 Changed 5 years ago by ryandesign (Ryan Carsten Schmidt)
Reading through the crossgcc-1.0 portgroup, it looks like it just runs ./configure and make once. Reading various documents*, I don't think that's enough to build a functional cross compiler. We run ./configure with --target set to the cross-compiling target, which is indeed what we need to do to build gcc. But we apparently also need to run ./configure with --build set to the build machine target and --host set to the cross-compiling target in order to build a proper glibc.
*
https://rtime.felk.cvut.cz/hw/index.php/How_to_build_GNU_cross-compilers
https://crossgcc.s0ufcgwqre.narkive.com/5dDCu94I/cross-compiled-native-compiler-ld-can-t-find-crt1-o
https://www.gnu.org/software/libc/manual/html_node/Configuring-and-compiling.html
https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/
comment:6 Changed 5 years ago by ryandesign (Ryan Carsten Schmidt)
Replying to mojca:
I use some other cross-compilers, just not this one.
Ports in MacPorts? Which ones? I'll try one.
comment:7 Changed 5 years ago by mojca (Mojca Miklavec)
x86_64-w64-mingw32-gcc
, for example.
But that one is probably a particularly bad example as it has 3 stages of building (and probably still didn't even get rid of circular dependencies).
comment:8 Changed 5 years ago by ryandesign (Ryan Carsten Schmidt)
x86_64-w64-mingw32-gcc does work but that port is structured completely differently from i386-elf-gcc. For one thing there are a bunch of subports, including x86_64-w64-mingw32-crt which contains the crtn.o files whose equivalents i386-elf-gcc is missing.
comment:9 Changed 5 years ago by mojca (Mojca Miklavec)
As I told you, this was probably the worst possible example. I remember working with one of the arm cross-compilers and I seem to remember that it worked ok, but I'm not absolutely sure which one.
comment:10 Changed 5 years ago by ryandesign (Ryan Carsten Schmidt)
Cc: | raimue added |
---|
What I'm getting at is: why are the different cross-compiler ports so different from another? Why is x86_64-w64-mingw32-gcc set up with so many different dependency ports whereas i386-elf-gcc is self-contained? Is it just that different maintainers have been interested in only some of the cross-compiler ports, and so some of them have evolved in ways that others haven't? Intuitively, I had expected all of the cross-compiler ports to be set up more or less identically, and the existence of the crossgcc-1.0 portgroup reinforced that expectation for me. But now that I look into it I see that 4 of the 5 arm-*-gcc* ports, for example, don't even use that portgroup. And i386-elf-gcc, the port I'm interested in and which uses the portgroup in what looks like an extremely straightforward way and which I had hoped would be the way that all of the cross-compiler ports would be set up, is one of the ones that doesn't actually work.
Rainer, it looks like you're the one developed the crossgcc-1.0 portgroup and switched i386-elf-gcc over to using it in [791eb1dd78775905d3614bff20303d9fb6005ecd/macports-ports] (#37260). Do you remember whether the port still worked correctly after this change back then? Do you have any suggestions on how to fix it now?
comment:11 Changed 5 years ago by mojca (Mojca Miklavec)
I hope that Rainer answers, I can only tell you why x86_64-w64-mingw32-gcc
is so much different from the others.
If you look at #40174, you'll notice that it took us some 2.5-3.5 years to even figure out how to build & package it (and that's after we already had a functional albeit abandoned i386-mingw32
port), and we still don't even have the dependencies sorted out correctly (they are still cyclic after all these years).
I have no clue how to properly test some random arch-platform-gcc
short of having some special hardware available, but I really needed to build some binaries for Windows that would eventually run on the same machine (MacBook) where I built them. And if things didn't work, I had to keep trying.
At least the MinGW-w64 cross-compiler requires a bunch of special Windows libraries that come from special packages, and there's a separate project devoted just to that. Lots of other boards need special support files to work.
It might make sense to check how other distributions are addressing the problem.
comment:12 follow-up: 13 Changed 5 years ago by raimue (Rainer Müller)
i386-elf is not targeting any operating system, it is meant for development on bare metal. I think the original reporter would be looking for i386-linux-gnu-gcc, but MacPorts does not provide a port for that.
comment:13 Changed 3 months ago by cooljeanius (Eric Gallager)
Replying to raimue:
I think the original reporter would be looking for i386-linux-gnu-gcc, but MacPorts does not provide a port for that.
Is there a separate ticket for that? If not, I'll open one (...unless someone else would like to beat me to it first, that is).
comment:14 Changed 3 months ago by cooljeanius (Eric Gallager)
Cc: | cooljeanius added |
---|
comment:15 Changed 3 months ago by superobertking (robertking)
Cc: | superobertking added |
---|
In the future, please use WikiFormatting and Cc the port maintainers (
port info --maintainers i386-elf-gcc
).