尝试使用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 %d\n", result, len);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译它的行是
gcc -g -o interp te1.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
Run Code Online (Sandbox Code Playgroud)
我所拥有的perl是在Ubuntu 12.04.4 LTS上运行的5.14.2.
谢谢你的任何提示!
更新:添加了gdb跟踪.谢谢你的询问.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)
Run Code Online (Sandbox Code Playgroud)
我通常从调用Perl的,而不是从Perl的C C,但我敢肯定,你的问题是,你有没有复制的PERL_SYS_INIT3,perl_alloc以及perl_construct从位perlembed例子,所以你实际上并没有一个perl与之合作的翻译结构.newSVpv当它试图通过不存在的解释器指针访问某些东西时,它正在轰炸.
作为良好实践,该示例(perl_destruct,perl_free和PERL_SYS_TERM)的最后三行也应在程序结束时调用.
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |