2012-11-26 31 views
6

Numpy导入失败我想嵌入一个python程序到c + +代码。我遇到的问题是使用包含numpy导入的python脚本。 例如,如果我使用以下C++代码当嵌入python在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; 
} 

与含有功能derive

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

它正确运行,但如果log.py包含from numpy import array以下log.py脚本,它失败

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

回答

2

我想你是静态链接,但不保留所有的符号,这是加载动态需要麦克风扩展模块(即-Xlinker -export-dynamic)。请参阅Linking Requirements,它建议您从distutils.sysconfig.get_config_var('LINKFORSHARED')查询正确的选项。

顺便说一句,可变功能Py_BuildValue是创建args更方便的方法。