2012-09-17 75 views
1

我正在Windows上構建一個Ruby C擴展,它需要一些外部C庫,特別是libcurl及其依賴項。我有curllib dll和.a文件。但是,當我使用extconf.rb構建它時,它總是動態鏈接這些庫,這需要某人安裝curl並在其windows路徑中使用編譯的擴展。相反,我希望extconf.rb靜態鏈接curl及其依賴關係,以便任何人都可以在Windows上使用擴展,而不必先將curllib添加到其路徑中。如何在編譯Ruby C擴展時靜態鏈接外部庫

這是我extconf.rb

require 'mkmf' 

# Name the extension. 
extension_name = 'ConnectionManager' 
dir_config("curl") 

# Make sure the cURL library is installed. 
have_library("curl") 

# Create the Makefile. 
create_makefile(extension_name) 

這是我生成的makefile我與

ruby extconf.rb --with-curl-dir=C:/Knapsack/x86-windows 

命令是否有東西,我可以添加到我的extconf.rb文件或命令強制ruby靜態鏈接外部庫到我的C擴展?任何幫助將不勝感激,請讓我知道,如果你需要任何更多的信息。

+0

實際上,我試圖鏈接與Ruby的C擴展CURL自己。將有興趣聽到你如何得到。如果您想分享鏈接CURL的一些經驗,請通過我在我的答案中發佈的Bitbucket鏈接找到我。 – thomthom

回答

0

我有一個類似的問題寫在Linux上使用gif_lib原生擴展。

嘗試添加以下到您的extconf.rb:如果庫和入口點都存在

unless find_library("curl", "curl_version") 
    abort "curl is not installed, please install and try again" 
end 

的find_library函數返回true,並具有將其添加到-l選項GCC的副作用。

我發現有用的這些鏈接: http://tenderlovemaking.com/2010/12/11/writing-ruby-c-extensions-part-2.html

這裏是C擴展(工作示例): https://github.com/e-g-r-ellis/ruby-giflib