我有一个适用于Racket的C扩展程序。在Racket CLI和DrRacket的交互窗口中,它就像一个魅力。但是,我无法在DrRacket的定义窗口中使用它,这非常有用,因为这是我的学生开发程序的界面。
问题似乎是扩展中的定义没有“看到”(或注册或某种东西)。该模块已加载(或至少找到),但DrRacket抱怨它没有执行权限,我不明白。
在C代码中,我将扩展声明为模块,我尝试了两种包含方法:
(load-extension“racket_extension.so”) 和 (需要“racket_extension.rkt”);这需要您将其放在相对于当前工作文件夹的文件夹中,如下所示: “编/天然的/ x86_64的-LINUX /3米/ racket_extension_rkt.so”
两种方法都不起作用。第一种情况没有错误,但外部的定义没有注册(“未定义”)。
在第二种情况下,DrRacket发出错误: 禁止(执行)访问....编译/ native / x86_64-linux / 3m / racket_extension_rkt.so 但为什么呢?
有没有人有想法如何让这个工作?我错过了什么?
谢谢! 马克
答案 0 :(得分:0)
您如何编译和链接您的扩展程序?你使用的是raco ctool还是gcc?您是否在与编译目录相同的目录中执行DrRacket?我通常测试扩展的方法是在与编译目录相同的目录中执行:drracket my_ext_test.rkt
。这对我来说一直是个问题。此外,如果它说禁止操作,您是否尝试更改.so的权限?也许它就像那样简单。我将从简单示例Writing Racket Extensions开始,并确保您可以在定义窗口中使用hello world程序。我个人从未遇到过你提到的问题,但我也在Linux上运行。