2014-01-13 40 views
0

我有一個適用於Racket的C擴展。在Racket CLI和DrRacket的交互窗口中,它就像一個魅力。但是,我無法在DrRacket的定義窗口中使用它,這非常有用,因爲這是我的學生開發其程序的界面。DrRacket中的C擴展

問題似乎是擴展中的定義不是'看到'(或註冊或其他)。該模塊被加載(或至少找到),但DrRacket抱怨它沒有執行權限,我不明白。

在C代碼我聲明瞭擴展是一個模塊,我試圖都列入方法:

(負載 - 延伸「racket_extension.so」) 和 (需要「racket_extension.rkt」);這需要你把它放在一個相對於當前工作文件夾的文件夾中,如下所示: 「compiled/native/x86_64-linux/3m/racket_extension_rkt.so」

這兩種方法都不起作用。第一種情況沒有錯誤,但外部的定義沒有註冊(「未定義」)。

在第二種情況下DrRacket給出了一個錯誤: 禁止(執行)訪問....編譯/本地/ x86_64的Linux的/3米/ racket_extension_rkt.so 但爲什麼呢?

有沒有人有想法,我可以得到這個工作?我錯過了什麼?

謝謝! Marc

+0

我沒有給你答案,但我認爲如果你在Racket郵件列表上提出這個問題,你更有可能得到答案:http://lists.racket-lang.org/users/ –

+0

謝謝阿蘇姆,我會的。我已經把它放在IRC頻道上,但目前爲止沒有迴應。 – Emjee

回答

0

你如何編譯和鏈接你的擴展?你使用的是raco ctool還是gcc?你是否在編譯目錄的同一目錄下執行DrRacket?我通常測試擴展的方式是在與我的編譯目錄相同的目錄中執行:drracket my_ext_test.rkt。這對我來說是一個問題。另外,如果它表示該操作被禁止,您是否嘗試更改.so的權限?也許這很簡單。我將從簡單的例子Writing Racket Extensions開始,並確保您可以讓hello world程序在定義窗口中工作。我個人從來沒有遇到過你提到的問題,但我也在Linux上運行。

+1

謝謝,我最近得到它與來自社區的最終細節工作。它與.so的權限無關,但顯然我將C函數導出到頂層命名空間而不是模塊命名空間,所以我更改了scheme_add_global(「function-one」,proc,env)info scheme_add_global(「函數一「,proc,mod_env),它的工作。 – Emjee

+0

我已經在github上使用了一個C擴展的項目:https://github.com/marcdinkum/racket_midi看一下,Makefile顯示了我如何編譯和鏈接。我想我現在可以解決這個問題,如果我知道如何:-) – Emjee