Sono ben consapevole delle molte possibilità che esistono per consentire al codice C di eseguire codice Python e viceversa (Cython, Boost.Python, ...). Tuttavia, a meno che non mi sbagli, tutti questi approcci si limitano a "chiamare" gli script Python rilevanti e a gestire le interazioni tra il programma C e lo script Python. Pertanto, è richiesta un'installazione di python.Compilare il codice Python e collegarlo al programma C++?
Nella mia situazione, mi piacerebbe una soluzione autonoma, in cui il mio codice Python può essere in qualche modo compilato e collegato al mio programma C++ principale. Ho avuto speranze con Cython, in quanto mi ha permesso di compilare il mio script e creare un file .so. Tuttavia, non sembra che sia stato in grado di "collegare" quel file .so al mio programma C++. Ho tentato quanto segue:
Un semplice script python contenente una funzione moltiplicata (a, b) che restituisce un * b; Ho creato un file libmultiply.so usando cython. un breve file di Cpp, che emette il risultato di moltiplicazione (5,2):
int multiply(int, int);
int main()
{
std::cout << multiply(5,2) << std::endl;
}
costruisco facendo: g ++ test.cpp -L/home/Jerome/-lmultiply
che dà me l'errore:
test.cpp:(.text+0x2b): undefined reference to `multiply(int, int)'
collect2: error: ld returned 1 exit status
non sono sicuro se quello che ho provato un senso, ma si spera che vi dà un'idea di quello che vorrei realizzare.
Cython non può farlo. Emette codice che collega all'API Python/C. A meno che l'API non sia disponibile, tutto ciò che costruisci da Cython non funzionerà. Inoltre (AFAIK) fa qualche manomissione di nome abbastanza aggressiva. – Kevin
Non è possibile 'compilare' il codice Python; funziona su una VM. Tuttavia, puoi "congelarlo" con qualcosa come "[PyInstaller] (https://pypi.python.org/pypi/PyInstaller)" (che può creare DLL/SO). E 'quello che stai cercando di fare? O forse "[cercando di capire la procedura di collegamento per scrivere python/c hybrid] (http://stackoverflow.com/questions/9826311/trying-to-understand-linking-procedure-for-writing-python-c-hybrid?rq = 1) "aiuterà. –
@snotwaffle Puoi compilarlo. Devi solo scrivere il compilatore :-) (dal momento che non sono a conoscenza di uno che è prontamente disponibile). –