GCC -shared option

-shared
Produce a shared object which can then be linked with other objects to form an executable. Not all systems support this option. For predictable results, you must also specify the same set of options used for compilation (-fpic, -fPIC, or model suboptions) when you specify this linker option.

Example :

gcc -fpic -c hellomodule.c hello_wrap.c -I/usr/include/python3.4/
gcc -shared hellomodule.o hello_wrap.o -o _hello.so

Reference :

https://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html

GCC -o file option

-o file

Place output in file file. This applies to whatever sort of output is being produced, whether it be an executable file, an object file, an assembler file or preprocessed C code.

If -o is not specified, the default is to put an executable file in a.out, the object file for source.suffix in source.o, its assembler file in source.s, a precompiled header file in source.suffix.gch, and all preprocessed C source on standard output.

Example :

gcc -shared hellomodule.o hello_wrap.o -o _hello.so

References :

https://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html