调用perl函数newSVpv()时C程序不断崩溃
发布时间:2020-12-16 06:19:20 所属栏目:大数据 来源:网络整理
导读:尝试使用perl数据结构(部分作为支持C中的关联数组的方式),但以下程序不断崩溃.它编译得很好但会在newSVpv()上崩溃.不知道为什么. #include EXTERN.h /* from the Perl distribution */#include perl.h /* from the Perl distribution */static PerlInterpret
尝试使用perl数据结构(部分作为支持C中的关联数组的方式),但以下程序不断崩溃.它编译得很好但会在newSVpv()上崩溃.不知道为什么.
#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) { char *proto = "http"; SV* ret = newSVpv("http",4); sv_catpvn(ret,"://",3); STRLEN len = 1; char *result = SvPV(ret,len); printf("result: %p %dn",result,len); return 0; } 编译它的行是 gcc -g -o interp te1.c `perl -MExtUtils::Embed -e ccopts -e ldopts` 我所拥有的perl是在Ubuntu 12.04.4 LTS上运行的5.14.2. 谢谢你的任何提示! 更新:添加了gdb跟踪.谢谢你的询问. Program received signal SIGSEGV,Segmentation fault. 0x00007ffff7b235a6 in Perl_newSVpv () from /usr/lib/libperl.so.5.14 (gdb) bt #0 0x00007ffff7b235a6 in Perl_newSVpv () from /usr/lib/libperl.so.5.14 #1 0x0000000000400927 in main (argc=1,argv=0x7fffffffe1e8,env=0x7fffffffe1f8) at te1.c:7 (gdb) 解决方法
我通常从Perl调用C,而不是从C调用Perl,但我很确定你的问题是你没有复制
perlembed example中的PERL_SYS_INIT3,perl_alloc和perl_construct位,所以你实际上没有一个perl解释器结构可以使用.当newSVpv试图通过不存在的解释器指针访问某些东西时,它正在轰炸.
该示例的最后三行(perl_destruct,perl_free和PERL_SYS_TERM)也应在程序结束时调用,这是一种良好的实践. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |