DrRacket中的C扩展

时间:2014-01-13 13:22:25

标签: c++ c racket

我有一个适用于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 但为什么呢?

有没有人有想法如何让这个工作?我错过了什么?

谢谢! 马克

1 个答案:

答案 0 :(得分:0)

您如何编译和链接您的扩展程序?你使用的是raco ctool还是gcc?您是否在与编译目录相同的目录中执行DrRacket?我通常测试扩展的方法是在与编译目录相同的目录中执行:drracket my_ext_test.rkt。这对我来说一直是个问题。此外,如果它说禁止操作,您是否尝试更改.so的权限?也许它就像那样简单。我将从简单示例Writing Racket Extensions开始,并确保您可以在定义窗口中使用hello world程序。我个人从未遇到过你提到的问题,但我也在Linux上运行。