我正在尝试运行NativeCall
运行的示例:
testImageAppendNoMirror
它只是段错误,这是使用指针时发生的情况,你不应该这样。在这种情况下,可能是由于use NativeCall;
class p_timespec is repr('CPointer') {
has uint32 $.tv_sec;
has long $.tv_nanosecs;
}
sub clock_gettime(uint32 $clock-id, p_timespec $tspec --> uint32) is native(Str) { * };
my p_timespec $this-time;
my $result = clock_gettime( 0, $this-time);
say "$result, $this-time";
的声明;我实际上已将其声明为p_timespec
,尽管the struct should be OK。但是,从分段错误来看,我无法理解其中的错误。有人可以帮忙吗?
答案 0 :(得分:9)
这里有两件事不对。
CStruct
表示这似乎有效:
use NativeCall;
class p_timespec is repr('CStruct') {
has uint32 $.tv_sec;
has long $.tv_nanosecs;
}
sub clock_gettime(uint32 $clock-id, p_timespec $tspec --> uint32) is native(Str) { * };
my p_timespec $this-time .= new;
my $result = clock_gettime( 0, $this-time);
say "$result, $this-time.tv_sec(), $this-time.tv_nanosecs()";
至于调试,Rakudo的安装过程还会安装perl6-gdb-m
和perl6-valgrind-m
;后者虽然很慢,但往往会提供一些有关内存错误的有用信息。