I’m using MinGW. I have some code which calls malloc and a few other general purpose functions. When I type:
gcc TestCode.c
I get an a.exe file, it works perfect, and I don’t get any warnings.
If I type this:
gcc -c TestCode.c -o TestCode.o
ld *.o
I get a whole bunch of warnings such as:
TestCode.o:TestCode.c:(.text+0xa): undefined reference to `__main'
TestCode.o:TestCode:(.text+0x2e): undefined reference to `printf'
TestCode.o:TestCode:(.text+0x42): undefined reference to `_strerror'
TestCode.o:TestCode:(.text+0x69): undefined reference to `snprintf'
TestCode.o:TestCode:(.text+0x7e): undefined reference to `malloc'
TestCode.o:TestCode:(.text+0x93): undefined reference to `_strerror'
TestCode.o:TestCode:(.text+0xb1): undefined reference to `sprintf'
TestCode.o:TestCode:(.text+0xcf): undefined reference to `free'
I’m assuming this is an issue with how I’m calling the linker. As such, I’ll only post the code if it isn’t clear what the problem is. I’m hoping this is an easy fix and that I simply forgot to include some super obvious library when linking.
It appears that your
lddoesn’t link any libraries by default. From your error messages, it looks like you need at least the C runtime andlibc. Usegccto link to get some handy defaults linked in for you:If you really want to use
lddirectly, you’re going to need to figure out the names of your C runtime library and libc. For example (assuming libraries namedlibcrtandlibc):