2012-11-26 12 views
6

Ich versuche, ein Python-Programm in C++ - Code einzubetten. Das Problem, das ich habe, ist Python-Skript, die einen numpy Import enthalten. zum Beispiel, wenn ich verwende Sie den folgenden C++ CodeNumpy-Import schlägt fehl, wenn Python in c eingebettet wird

#include <Python.h> 
int main(int argc,char *argv[]) 
{ 
double 
    x=2., 
    xp=4., 
    dt=6., 
    y=8, 
    yp=1, 
    dz=6; 
Py_Initialize(); 

PyObject* myModuleString = PyString_FromString((char*)"log"); 
PyObject* myModule = PyImport_Import(myModuleString); 


PyObject* myFunction = PyObject_GetAttrString(myModule,(char*)"derive"); 
PyObject* args = PyTuple_Pack( 6, 
PyFloat_FromDouble(x), 
PyFloat_FromDouble(xp), 
PyFloat_FromDouble(dt), 
PyFloat_FromDouble(y), 
PyFloat_FromDouble(yp), 
PyFloat_FromDouble(dz)); 

PyObject* myResult = PyObject_CallObject(myFunction, args); 

PyObject *ts= PyTuple_GetItem(myResult,0); 
PyObject *zs= PyTuple_GetItem(myResult,1); 
double result_t = PyFloat_AsDouble(ts); 
double result_z = PyFloat_AsDouble(zs); 
printf("%3f \n %f \n", result_t,result_z); 

Py_Finalize(); 

system("pause"); 

return 0; 
} 

mit folgendem log.py Skript, das die Funktion enthält derive

def derive(x,xp,dt,y,yp,dz): 
return log(abs(x - xp)/dt),exp((y-yp)/dz) 

es richtig läuft, aber wenn die log.py enthalten from numpy import array, es schlägt fehl

Antwort

2

Ich denke, Sie verknüpfen statisch, aber nicht alle Symbole, die zum Laden von Dyna erforderlich ist Mikrofonverlängerungsmodule (d. h. -Xlinker -export-dynamic). Siehe Linking Requirements, die empfiehlt, dass Sie die richtigen Optionen von distutils.sysconfig.get_config_var('LINKFORSHARED') abfragen.

BTW, die variadic Funktion Py_BuildValue ist eine bequemere Möglichkeit, args zu erstellen.

Verwandte Themen