Quantcast
Channel: Active questions tagged gcc - Stack Overflow
Viewing all articles
Browse latest Browse all 21994

How to compile and run a C program with `gcc`?

$
0
0

A complete newbie here. I am learning to read the codes on suckless.org. They are written in C, and are most quite short, so I think it's a good start.

The problem is I know too little to start with. Wandering around on the site, I found that the suckless community has their own coreutils, which are also very short. echo.c on this page is one of the shortests. I include its header here:

/* See LICENSE file for copyright and license details. */#include <stdio.h>#include <string.h>#include "util.h"

I'd like to compile it and see how this version of echo works, and come back to understand the code. The goal is to repeat this process until I'm comfortable enough to read the source codes of their their larger programs like sent, dmenu, dwm.

In the code, the header #include "util.h" suggests me to put util.h, which is another file in the link above, together with echo.c. I also include arg.h and compat.h because the header of util.h says

#include <sys/types.h>#include <regex.h>#include <stddef.h>#include <stdio.h>#include "arg.h"#include "compat.h"

I further checked arg.h and compat.h. Neither of them includes customized header files, so I think I'm good to go. Now the folder tree looks like

$ tree.├── arg.h├── compat.h├── echo.c└── util.h

and I run $ gcc echo.c -o echo.o. However, I got an error

/usr/bin/ld: /tmp/cc2VjXNO.o: in function `main':echo.c:(.text+0x20): undefined reference to `argv0'/usr/bin/ld: echo.c:(.text+0x27): undefined reference to `argv0'/usr/bin/ld: echo.c:(.text+0x8d): undefined reference to `putword'/usr/bin/ld: echo.c:(.text+0xc8): undefined reference to `fshut'collect2: error: ld returned 1 exit status

Apparently, these undefined arguments are in those header files. Searching around on the net, I further tried

$ gcc -c . echo.c -o echo.ogcc: warning: .: linker input file unused because linking not done

It spits a warning, but anyway an echo.o is delivered. I chmod it to executable, and run it by $ ./echo.o, but my shell complains

zsh: exec format error: ./echo.o

I spent another hour trying to solve this.. by try and error, but in vain. Would you please point out what's going on? And what should I do?

(Any other suggestions will also be very appreciated.)


Viewing all articles
Browse latest Browse all 21994

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>