2012-11-26 5 views
6

Sto provando ad incorporare un programma python in codice C++. il problema che ho è di usare script python che contengono un'importazione numpy. per esempio, se io uso il seguente codice C++L'importazione di Numpy non riesce quando si incorpora python in c

#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; 
} 

con il seguente script log.py che contengono la funzione derive

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

funziona correttamente, ma se il log.py contengono from numpy import array, fallisce

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

risposta

2

Penso che tu stia collegando staticamente ma non mantenendo tutti i simboli, che è richiesto per caricare dyna moduli di estensione mic (ad es. -Xlinker -export-dynamic). Vedere Linking Requirements, che consiglia di richiedere le opzioni corrette da distutils.sysconfig.get_config_var('LINKFORSHARED').

BTW, la funzione variadica Py_BuildValue è un modo più conveniente per creare args.

Problemi correlati