Embed python function in C++
c++, cython, python
Solution
You're not going to be able to get the interoperation you want that way. If you open and inspect hello.c you won't find "static int say_hello" anywhere in there. Cython is designed for letting Python use C libraries, not letting C libraries use python.
You can look here in the documentation, but unfortunately this support is still for a python interpreter that is "in charge" and what you're looking for is the other way around.
http://docs.python.org/release/2.5.4/ext/callingPython.html
There's also the primer on "Embedding Python in Another Application"
http://docs.python.org/2/extending/embedding.html
I don't know what your requirements are, but in some cases you can successfully write data to a file, call a Python program to chew on it, then parse the results from another file. It's a little ugly and slower than keeping things in memory but it's entirely workable in many situations.
Problem
I am experimenting with Cython to generate c code from python but there seems to be some issues with name mangling. I first generate convert the code from python to c code and then I compile the code using gcc into a .so . The reason I want to use cython instead of C/python API is because I will be later using this on more complicated classes that I would like to be a library for speed etc later on (I am having a lot of trouble finding people who go from python to C++ since it is usually the other way around). Below is all the code that I have to try to execute the code (but fails). Any input will be appreciated. Thanks! ``` #hello.pyx def say_hello(): print "Hello World!" #generate the c code cython -a hello.pyx #creates the shared library gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/usr/include/python2.6 -o libhello.so hello.c //temp.cpp #include <iostream> extern "C" { void say_hello(); }; using namespace std; int main(){ say_hello(); return 1; }; #attempt to compile (this is where it fails) g++ -I/usr/include/python2.6/ -lpython2.6 -L./ -lhello temp.cpp -o temp ``` Here is the error message: ``` /tmp/ccpKHOMl.o: In function main: temp.cpp:(.text+0x5): undefined reference to say_hello' /tmp/ccpKHOMl.o: In function __static_initialization_and_destruction_0(int, int): temp.cpp:(.text+0x33): undefined reference to std::ios_base::Init::Init() temp.cpp:(.text+0x38): undefined reference to std::ios_base::Init::~Init() collect2: ld returned 1 exit status ```