GCC is normally instructed to output to a file via the -o
switch. If this isn't provided it seems to decide on an appropriate name and output to that. How do I make GCC write its generated output to stdout?
Asked
Active
Viewed 1.2k times
32

Matt Joiner
- 112,946
- 110
- 377
- 526
-
1Where are you going to pipe it to? – dreamlax Aug 13 '10 at 07:06
-
1As ergosys's answer implies, some invocations of GCC will output an assembly file, not binary. In my case I want to look at it! – Brooks Moses Feb 15 '13 at 00:38
3 Answers
38
gcc -o /dev/stdout foo.c
Note that /dev/stdout
is defined as a symlink: /dev/stdout -> /proc/self/fd/1
.

Matt Joiner
- 112,946
- 110
- 377
- 526

sarnold
- 102,305
- 22
- 181
- 238
-
Now, is there a similar solution for Windows? Or will I have to hack it for cross-platform solutions? – Kevin Cox Jul 27 '13 at 19:26
-
@Kevin, wild guess, try `-o CON`? It's been a while since I've done Windows. :/ – sarnold Jul 29 '13 at 21:14
-
5**A word of caution on Cygwin**: `gcc -o /dev/stdout foo.c` outputs nothing, but `gcc -c -o /dev/stdout foo.c` **deletes `/dev/stdout`!** – Matt Feb 19 '15 at 15:59
-
1
27
You can use -o-, for example to print an assembly listing:
gcc -S -o- in.c

ergosys
- 47,835
- 5
- 49
- 70
-
9It's important to note that this only works for some outputs. For example `gcc -o- test.c` creates an executable called `-`. – Kevin Cox Jul 27 '13 at 19:24
-
Its good to understand `-o-` as actually `-o -`. `-` refers to standard input/output depending on the context. – Hari Mar 17 '23 at 11:55
-1
Um, what are you going to do with a binary object file dumped to stdout? anyway, some programs accept the '-' (single minus, no quotes) character as replacement for stdout. If you're on linux, you can do -o /dev/fd/1

zvrba
- 24,186
- 3
- 55
- 65