Yes it's possible, but a little hackery is required.
First lets consider our main program and a support library
cythontest.pyx:
cpdef int square(int n):
return n * n
cythontestmain.pyx
import cythontest
print(cythontest.square(100))
Lets build it with:
cython3 --embed cythontestmain.pyx
cython3 cythontest.pyx
gcc -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/usr/include/python3.5m -o cythontestmain cythontestmain.c cythontest.c -lpython3.5m
Unfortunately this doesn't work. The loader can't find the module. Fortunately it is possible to load it manually by adding a couple of lines to the top of cythontestmain.pyx
cdef extern void * PyInit_cythontest()
PyInit_cythontest()
(the return type of void * is not strictly correct, but since we are throwing away the return value anyway it's unlikely to be an issue in practice).
We can now build and run the program successfully.