我在此目录中有以下文件:
~/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
有人可以解释为什么这不起作用吗?
答案 0 :(得分:2)
这看起来是因为使用~
来指定主目录。如果shell是单词的第一个字符,则shell仅将~
扩展到主目录的路径。当mkmf
构造命令行以调用编译器来检查库是否存在时,它使用-L
选项指定要调用的目录,并且最终看起来像-L~/test/lib
,并且所以没有扩大。您应该可以在mkmf.log
文件中看到这一点。
修复是为了避免目录路径中的~
字符,或者在调用编译器之前确保它被扩展。
您可以将dir_config('','~/test')
更改为:
dir_config('', File.expand_path('~/test'))