Reputation: 668
I am well aware of the many possibilities that exist to allow C code to run python code, and vice versa (Cython, Boost.Python, ...). However, unless I am mistaken, all those approaches merely "call" the relevant python scripts and manage the interactions between the C program and the python script. Therefore, an installation of python is required.
In my situation, I would like a stand-alone solution, where my python code can be somehow compiled and linked to my main C++ program. I had hopes with Cython, as it allowed me to compile my script and create a .so file. However, I don't seem to have been able to "link" that .so file to my C++ program. I attempted the following:
A simple python script containing a function multiply(a,b) which returns a*b ; I created a libmultiply.so file using cython. A short Cpp file which outputs the result of multiply(5,2):
int multiply(int, int);
int main()
{
std::cout << multiply(5,2) << std::endl;
}
I build by doing : g++ test.cpp -L/home/jerome/ -lmultiply
Which gives me the error :
test.cpp:(.text+0x2b): undefined reference to `multiply(int, int)'
collect2: error: ld returned 1 exit status
I am not sure if what I tried makes sense, but hopefully it gives you an idea of what I would like to achieve.
Upvotes: 5
Views: 1861
Reputation: 782
Shed Skin is the closest thing I could find. It compiles a typed subset of Python to c++. Probably not as robust as you'd like but this is an odd use case. If you feel like writing up something yourself, you could look into LLVM which has been used to create things similar to what you want.
Edit 1:
I just found this list of awesome python things on github, Awesome-python, and it links to Pyston which is a python LLVM implementation. May be a better fit for what you want or a starting point for a Python to C++ bridge.
Upvotes: 3