设为首页 加入收藏

TOP

C语言嵌入Python
2014-11-24 08:32:17 来源: 作者: 【 】 浏览:0
Tags:语言 嵌入 Python

1.为什么要嵌入python?


这个问题问的好,一般静态语言与脚本语言(不仅仅是python),相互搭配,有两种方式,一种是用c语言写好模块,然后用python去整合,也被称之为扩展python,这样的好处是即有python的灵活性,又有c语言的效率,还有一种就是c语言嵌入python,这样我们就有了一个python解释器了,在游戏编程中常用这种方法,如果你是用静态语言编程,那么修改一些属性,就意为着重新编译,如果程序很大的话,编译是一间令人很烦的事,编译起来非常慢,一种好的设计是把一些属性写在一个初始化文件中,然后在程序中去解析这个属性文件,不过这样还是不够灵活,更加灵活的方式,就是干脆嵌入python(游戏编程中常用lua),这样,游戏更有创造性,更容易扩展。


2.一个"错误的"例子


下面先把C代码写出来,(当然,直接编译肯定是错的,因为我们还有许多东西没设置)


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");
Pyeva l_CallObject(pFunc,NULL);
Py_Finalize();


return 0;
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Maven编译Hadoop的trunk项目报错:.. 下一篇裸板开发--makefile 出错问题解决

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·怎样用 Python 写一 (2025-12-27 02:49:19)
·如何学习python数据 (2025-12-27 02:49:16)
·想要自学数据分析, (2025-12-27 02:49:14)
·Java 集合框架 - 菜 (2025-12-27 02:19:36)
·Java集合框架最全详 (2025-12-27 02:19:33)