2.一个"错误的"例子
main.c
#include
int main()
{
Py_Initialize();
PyRun_SimpleString("print 'hello,python!'");
Py_Finalize();
return 0;
}
Py_Initialize()和Py_Finalize()就是初始化和结束python解释器,PyRun_SimpleString()就在运行一段python语句,(好像表达式不行...)
你一定觉得你没有Python.h这个头文件,所以你不得不安装一个叫python-dev的东西,直接sudo apt-get python-dev好了
现在我们试着编译一下,
gcc -o main.c main
编译错误,它找不到Python.h,它当然找不到,我们虽然已经下载安装了,但是gcc并不能找到,我们需要告诉它,这就要用到gcc 的 -I选项
"-I 在头文件的搜索路径列表中添加dir目录。" --- man 关于gcc -I选项的说明
我们继续尝试编译:
gcc -I/usr/include/python2.6 main.c -o main
然后你会看到一大堆的错误
undefined reference to
恩,链接错误,他们并没有找到库的实现
你需要这样编译
gcc -I/usr/include/python2.6 -lpython2.6 main.c -o main
这次就没问题了。
实际上我们更常见的做法是写一个python模块,然后导入,调用它,
看这个代码:
Test.py
def hello():
print "nihao"
main.c
#include
#include
int main()
{
Py_Initialize();
PyObject *pModule = NULL;
PyObject *pFunc = NULL;
pModule = PyImport_ImportModule("Test");
pFunc = PyObject_GetAttrString(pModule, "hello");
PyEval_CallObject(pFunc,NULL);
Py_Finalize();
return 0;
}
if (pModule == NULL)
{
printf("the pModule is NULL\n");
}
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
这样就没问题了。在编译一次。
运行
nihao
....
想要了解更多,更详细的用法,去啄木鸟社区吧。
终
作者:aiqier
csdn博客:http://blog.csdn.net/aiqier627