[Gem ] Ruby FFI -- 在Ruby中引用C函式庫
往上搜尋 沒看到有討論這個gem 所以來野人獻曝一下
如果你像我一樣 想要引入自己用C寫的函式
並且希望最好只用ruby就能直接調用 而且最好不用再用C改寫或再編譯
那麼你可以考慮這個最佳解決方案 -- Ruby FFI
我在google上 找到了幾個在ruby中引入C的方法 順便列出來比較一下
1. C Extensions
很麻煩 必須用C以特定的方式 實作膠水層 編譯也很麻煩
2. swig
優點是 寫好一種語言 可以生成多種語言的函式庫
不過 依然面臨麻煩的編譯過程
如果需要傳遞 陣列 指標 或是結構 仍然免不了要用C Extension的方式撰寫
3. RubyInline
可以直接插入一段C code 而且執行時能夠自動編譯 省去自己編譯的麻煩
用c method 插入自己寫一段C程式碼去引用C函式庫 就可搞定
不過 如果遇到陣列 指標 或是結構 仍然必須用C Extension的方式撰寫 並用c_raw插入
4. DL lib
這個可以直接連接已有的函式庫 不過用的人不多 聽說有bug 不是很清楚
5. Ruby FFI
優點:
(1)直接使用ruby code實做膠水層 不需再用C
(2)基本型別自動轉換
(3)可以跨不同的ruby
(4)可以layout結構
(5)可以產生c陣列 可以傳遞指標
(6)不用再編譯 就可直接連結現有C lib
Ruby FFI這個gem出現才一年左右
目前的完成度已經可以滿足一般用途
缺點是 還找不太到良好的文件可看
目前完全針對C開發 不過 理論上要連結其他語言的函式庫也是有可能
高手可以研究看看
以下列出一些連結供有興趣研究的人參考
官網 http://wiki.github.com/ffi/ffi
rubyforge http://rubyforge.org/projects/ffi/
教學或簡介網頁
http://tinyurl.com/yafs8sz 線上powerpoint (英文)
http://tinyurl.com/y8tkxms (簡中)
http://tinyurl.com/6bkodj (英文)
http://lifegoo.pluskid.org/?p=370 Rubinius FFI (英文)
題外話 想嘗試編自己的C函式庫 則可參考
http://blog.xuite.net/csiewap/cc/23626229
http://blog.xuite.net/csiewap/cc/23626528
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.169.109.215
推
11/23 01:03, , 1F
11/23 01:03, 1F
→
11/23 01:04, , 2F
11/23 01:04, 2F
→
11/23 01:04, , 3F
11/23 01:04, 3F
推
12/07 20:46, , 4F
12/07 20:46, 4F
推
12/07 22:29, , 5F
12/07 22:29, 5F
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章