У меня есть работающее C-расширение для Racket. В интерфейсе командной строки Racket и в окне взаимодействий DrRacket это работает как шарм. Тем не менее, я не могу заставить его работать в окне определений DrRacket, что было бы очень полезно, так как это интерфейс для моих студентов для разработки своих программ.
Кажется, проблема в том, что определения в расширении не «видны» (или зарегистрированы или что-то в этом роде). Модуль загружен (или, по крайней мере, найден), но DrRacket жалуется, что у него нет разрешения на его выполнение, чего я не понимаю.
В коде C я объявил расширение модулем и попробовал оба метода включения:
(расширение нагрузки «racket_extension.so»)
а также
(требуется «racket_extension.rkt»); для этого необходимо поместить его в папку относительно текущей рабочей папки следующим образом:
«Компилируется / родной / x86_64-линукс / 3m / racket_extension_rkt.so»
Ни один из методов не работает. Первый случай не дает ошибки, но определения внешнего не зарегистрированы («неопределенные»).
Во втором случае DrRacket выдает ошибку:
запрещенный (выполнить) доступ к …. скомпилированному / native / x86_64-linux / 3m / racket_extension_rkt.so
но почему?
У кого-нибудь есть идеи, как мне заставить это работать? Что мне не хватает?
Спасибо!
Марк
Как вы компилируете и связываете свое расширение? Вы используете raco ctool или gcc? Вы выполняете DrRacket в том же каталоге, что и ваш скомпилированный каталог? Обычно я проверяю свои расширения так: drracket my_ext_test.rkt
в том же каталоге, что и мой скомпилированный каталог. Это было проблемой для меня в прошлом. Кроме того, если говорится, что действие запрещено, пытались ли вы изменить разрешения вашего .so? Может быть, это так просто. Я бы начал с простого примера Написание Расширений Ракетки и убедитесь, что вы можете заставить программу hello world работать в окне определений. Лично у меня никогда не было проблемы, о которой вы упоминали, но я также работаю в Linux.
Других решений пока нет …