2012-03-03 21 views

回答

4

如果C代碼相當複雜(因爲你提到的自動工具和配置我認爲它是)爲什麼你不考慮構建獨立於Ruby的獨立C庫?然後用粘合代碼構建一個小而簡單的Ruby gem。 最終,C庫將在Debian或其他Linux發行版的倉庫中可用,並且這種解決方案的維護將與所有其他gem類似,它們只是C庫的包裝器。

+0

我會強烈地考慮這一點。所討論的庫實現簡化的窗口和圖形。由於C語言和其他語言已經有很多替代品,我認爲它不會增加太多價值。 – 2012-03-12 15:35:33

5

有一些工具可以幫助是這樣的情況(例如rake-compiler寶石),但我更喜歡使用RubyInline寶石。它旨在用其他語言的實現(例如,C支持即用型)代替Ruby代碼的慢速,性能關鍵部分,但它也用於內聯調用外部C庫的代碼。

一個例子了RubyInline如下所示:

class MyClass 
    inline(:C) do |builder| 
    builder.include '<stdio.h>' 
    builder.c <<-END 
     void my_printf(char * string){ 
     printf("%s\\n",string); 
     } 
    END 
    end 
end 
MyClass.new.my_printf("Abc") 
# prints 'Abc' 

了RubyInline的很好的功能是,你不必保留單獨的文件C和紅寶石,一些基本的參數轉換,支持開箱即用和您不必編寫膠合代碼。不好的部分是你沒有完全控制編譯等。 我個人認爲RubyInline是一個非常強大的解決方案。

+1

+1,我已經在使用'rake-compiler',我同意'inline'是一個了不起的工具,但是我想要保留單獨的Ruby和C代碼庫。我想要替代'mkmf'的原因是它強加了一個令人難以置信的不靈活的文件夾結構 - [所有文件必須與'extconf.rb'位於同一目錄中](http://stackoverflow.com/q/7698192/512904 )。我正在考慮自行解決問題。 – 2012-03-03 20:03:19

+0

不幸的是,我不知道這樣的替代方案。 – 2012-03-05 11:57:48

相關問題