我正在構建本地C擴展Ruby gem以生成唯一標識符(找到here)。如果可能的話,我希望圖書館使用libuuid(通過C擴展)並回退到簡單的Ruby實現。我目前有用於生成UUID的C和Ruby代碼,但我無法弄清楚如何配置成功的回退。有任何想法嗎?本地C擴展(如果庫可用)
4
A
回答
3
的have_library
方法有返回值:
返回是否給定的切入點
func
可以在lib
被發現。
所以,你應該能夠做到這一點:
$defs.push('-DUSE_RUBY_UUID') if !have_library('uuid')
create_makefile("identifier")
然後設置你的C使用libuuid如果沒有定義USE_RUBY_UUID
和調入Ruby的UUID庫,如果它被定義。
奇怪的是,have_header
和have_func
方法mkmf.rb
添加宏爲您提供:
# File mkmf.rb, line 840
def have_header(header, preheaders = nil, &b)
checking_for header do
if try_header(cpp_include(preheaders)+cpp_include(header), &b)
$defs.push(format("-DHAVE_%s", header.tr_cpp))
true
else
false
end
end
end
但have_library
讓你自己做。
+0
我會首先在ruby中定義所有的方法。然後需要C擴展。如果找到該庫,請覆蓋一些ruby方法。如果找不到,什麼都不要做。 –
+0
@David:這取決於他現有的C如何設置。完全繞過Ruby並直接進入C庫會比通過Ruby的方法解析和編組/解組系統繞行要快得多,可能要方便得多。 –
相關問題
- 1. 本機擴展 - C++本機庫
- 2. 從本地擴展
- 3. 是否有可能在本地擴展chrome擴展中的css?
- 4. 用腳本擴展C++
- 5. 如何使用js-ctypes Firefox擴展調用本地C代碼?
- 6. 是否可以將本地擴展添加到Actionscript庫項目?
- 7. 從本地Sqlite數據庫填充可擴展ListView
- 8. 果園可擴展框架
- 9. 如何使用WPF本地化擴展本地化資源?
- 10. 在C中的擴展庫#
- 11. .net本地擴展爲node.js
- 12. MediaWiki本地擴展鏈接
- 13. 使數據庫可擴展
- 14. C可擴展陣列
- 15. 如何本地化Safari擴展?
- 16. Codeigniter-如何在擴展本地庫時使用數據庫函數?
- 17. 如何用C#擴展vbscript#
- 18. 使用Gnome-Shell擴展中的C庫
- 19. 使用本地SQlite數據庫填充可擴展列表視圖的方法
- 20. 用擴展方法替代本地化
- 21. Indesign可擴展文本框
- 22. 禁用擴展庫
- 23. C節點本地擴展調用方法兩次
- 24. 擴展精度浮點庫C/C++
- 25. 我可以用C++擴展lisp嗎?
- 26. 可擴展數據庫模式 - 如何存儲可擴展屬性值
- 27. 我可以用本地代碼擴展Corona嗎?
- 28. 用C++擴展Ruby?
- 29. 版本的核心庫和擴展庫
- 30. 用C宏擴展/ C++
通常開發者所做的是提供一個純粹的和非純粹的gem版本。 –
@Pablo如在兩個單獨的版本的寶石? –
我這麼認爲,至少'json' gem有一個'json_pure'版本。 –