c++中嵌入perl,python

  c++中嵌入perl,python
昨日无意翻了下“黑豹书”(perl 高级编程),发现里面的嵌入perl解释器的那部分
内容已经过时了,写下过程,关键点就是找到perl安装路径的lib/CORE
里面有 perl58.lib 或perl.lib ,
还有就是头文件 EXTERN.h and perl.h 。

代码为:interp.c(来自perldoc)
    #include <EXTERN.h>               /* from the Perl distribution     */
#include <perl.h> /* from the Perl distribution */

static PerlInterpreter *my_perl; /*** The Perl interpreter ***/

int main(int argc, char **argv, char **env)
{
PERL_SYS_INIT3(&argc,&argv,&env);
my_perl = perl_alloc();
perl_construct(my_perl);
PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
perl_parse(my_perl, NULL, argc, argv, (char **)NULL);
perl_run(my_perl);
perl_destruct(my_perl);
perl_free(my_perl);
PERL_SYS_TERM();
}

编译器如果是vc的话把 lib/CORE 路径加上 里面的include 和lib要设置
如果是gcc:
    % gcc -O2 -Dbool=char -DHAS_BOOL -I/usr/local/include
-I/usr/local/lib/perl5/i586-linux/5.003/CORE
-L/usr/local/lib/perl5/i586-linux/5.003/CORE
-o interp interp.c -lperl -lm
win平台的把-I -L换成你的CORE路径 -l 换成你的perl58=》对应perl58.lib

然后运行这个程序interp(interp.exe)就可以当perl解释器用了。

    % interp -e 'printf("%x", 3735928559)'
deadbeef

    % interp
print "Pretty Good Perl /n";
print "10890 - 9801 is ", 10890 - 9801;
<CTRL-D>
Pretty Good Perl
10890 - 9801 is 1089
更进一步应用可以改红色的两行。

python的嵌入也是一样 需要的python的头文件和lib

#include <Python.h> int main(int argc, char *argv[]) { Py_Initialize(); PyRun_SimpleString("from time import time,ctime/n" "print 'Today is',ctime(time())/n"); Py_Finalize(); return 0; } 编译器参数安装perl的来改;
python随带的doc说的很清楚,另外boost里面也有直接嵌入python的库,需要编译
bjam好辛苦。

嵌入解释器的最典型的案例就是emacs,它嵌入了lisp解释器,使之就如一个操作系统一样
不止是扩展和定制这么简单。应用到自己的项目,就可以给用户更多的方便,当然这就得
使用堆栈访问的高级特性了。

那c++ 和perl、python 两个程序分离不也行么?使用临时文件做介质,或使用子进程
管道来取数据,但这样的结果就是环境不连贯,关键性地方性能受限,换句话,不是因为性能
就只用perl、python好了。所以嵌入还是有其优点的。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值