如何使用ruby的mkmf链接到外部c库?

时间:2011-11-15 16:20:01

标签: ruby rubygems mkmf

我在此目录中有以下文件:

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

我试图通过在irb中执行以下操作让我的rubygem确定上面的库是否存在:

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 个答案:

答案 0 :(得分:2)

这看起来是因为使用~来指定主目录。如果shell是单词的第一个字符,则shell仅将~扩展到主目录的路径。当mkmf构造命令行以调用编译器来检查库是否存在时,它使用-L选项指定要调用的目录,并且最终看起来像-L~/test/lib,并且所以没有扩大。您应该可以在mkmf.log文件中看到这一点。

修复是为了避免目录路径中的~字符,或者在调用编译器之前确保它被扩展。

您可以将dir_config('','~/test')更改为:

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