我在C中有一个应用程序,在某些时候我需要解决非线性优化问题。不幸的是,AFAIK在C中的资源非常有限(请让我知道其他情况)。但是在Python中使用它很简单,例如scipy.optimize.minimize。
当我试图这样做时,我遇到了一些似乎非常频繁的陷阱,例如未找到Python.h
,模块未加载,函数调用时出现分段错误等
什么是快速简便的第一计时器链接这两个程序的方法?
答案 0 :(得分:8)
为了使这项工作,你必须确保有一些事情要做:
python-dev
包)。Python.h
文件,例如按locate Python.h
。其中一个出现位于include
文件夹的子(子)文件夹中,例如路径应该是../include/python2.7/Python.h
。#include “<path_to_Python.h>"
以便能够使用Python API。使用任何教程来调用Python函数。我使用this one并且它完成了诀窍。然而,有几个小点缺失:
每当您使用任何Py<Name>
功能时,例如PyImport_Import()
,始终检查结果以确保没有错误,例如
// Load the module object
pModule = PyImport_Import(pName);
if (!pModule)
{
PyErr_Print();
printf("ERROR in pModule\n");
exit(1);
}
在初始化Python解释器之后,即在Py_Initialize();
之后,您必须将当前路径追加到sys.path
以便能够加载您的模块(假设它位于您的模块中)当前目录):
PyObject *sys = PyImport_ImportModule("sys");
PyObject *path = PyObject_GetAttrString(sys, "path");
PyList_Append(path, PyString_FromString("."));
.py
。../include/python2.7/Python.h
文件吗?在编译期间,在include
选项中使用-I
选项将gcc
文件夹包含在头文件目录列表中,例如-I /System/Library/Frameworks/Python.framework/Versions/2.7/include
。include
文件夹所在的同一文件夹中,例如-L /System/Library/Frameworks/Python.framework/Versions/2.7/lib
以及-lpython2.7
选项(当然根据您的Python版本调整它)。现在你必须能够成功编译和执行你的Python程序调用它的C程序。
我希望这很有帮助,祝你好运!
来源: