Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Compile python code and link it to C++ program?

Tags:

c++

python

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.

like image 829
jerorx Avatar asked Oct 19 '22 20:10

jerorx


1 Answers

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.

like image 141
bob0the0mighty Avatar answered Oct 22 '22 11:10

bob0the0mighty