views:

379

answers:

2

Is it possible to convert an object file .o that was created from a .c source code to .exe? And if it is possible is there a direct command using gcc?

+13  A: 
gcc foo.o -o foo.exe
sepp2k
This is the way... assuming that your .c had the main() function, that it does depend on other .c/.o files, and that it does not need to link to some non-standard/non-included library.
leonbloy
+2  A: 

Converting a .o to a .exe may be possible, depending on the contents of the .o. The .o must satisfy the requirements of an .exe. One of those is a main function.

I commonly separate projects into pieces by theme. Each piece is translated into a .o file. An individual piece cannot be converted to a .exe, but all the pieces combined can be converted.

For example, if I compile the following file it will turn into a .o file:
{hello.c}

#include <stdio.h>

void Hello()
{
  puts("Hello");
  return;
}

Next, I compile:

gcc -c hello.c -o hello.o

This will create the hello.o file. This cannot be converted into a .exe file because it has no starting function. It is just information.

However, the following text can be converted from .o to .exe:
{main.c}

#include <stdio.h>
int main(void)
{
  puts("Hello from main.\n");
  return 0;
}

Create a .o file:

  gcc -c -o main.o main.c

And since it has an entry point, named main by definition of the language, the main.o can be converted to a .exe:

  gcc -o main.exe main.o

In summary, some .o files can be converted to .exe while others can't. In the C and C++ languages, a .o file must have a main function in order to become an executable, .exe file. Note: The C and C++ language specifications do not require translation to .o files before creating an executable.

Thomas Matthews