2011-11-15 54 views
3

我有這個目錄中的以下文件:如何用ruby的mkmf鏈接到外部c庫?

~/test/lib/liblost.dylib 
~/test/include/lost.h 

我試圖讓我的rubygem確定是否做在IRB以下存在上述庫:

ruby-1.9.2-p290 :008 > dir_config('','~/test') 
=> ["~/test/include", "~/test/lib"] 
ruby-1.9.2-p290 :009 > have_library('lost') 
checking for main() in -llost... no 
=> false 

是否有人可以解釋爲什麼這不起作用?

+1

確定'liblost.dylib'是一個共享庫? '文件liblost.dylib'顯示什麼? – matt

+0

liblost.dylib:Mach-O 64位動態鏈接共享庫x86_64 – Coderama

回答

2

這看起來像是由於使用~來指定主目錄。如果它是單詞的第一個字符,則shell僅將~擴展到您的主目錄的路徑。當mkmf構造命令行來調用編譯器檢查庫的存在時,它指定要使用-L選項調用的目錄,並且它最終看起來像-L~/test/lib,因此不會展開。您應該能夠在mkmf.log文件中看到這一點。

此修復程序旨在避免在目錄路徑中使用~字符,或確保在用於調用編譯器之前將其擴展。

您可以通過改變dir_config('','~/test')做到這一點:

dir_config('', File.expand_path('~/test'))