3

我在这个目录中有以下文件:

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

我试图让我的 ruby​​gem 通过在 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 

有人可以解释为什么这不起作用吗?

4

1 回答 1

2

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

解决方法是避免~目录路径中的字符,或确保在调用编译器之前将其展开。

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

dir_config('', File.expand_path('~/test'))
于 2011-11-18T17:13:39.157 回答