我有一个extconf.rb
,其中包含以下几行:
have_header("cblas.h") # checking for cblas.h... yes
have_func("cblas_dgemm", ["cblas.h"]) # checking for cblas_dgemm() in cblas.h... no
create_header("nmatrix_config.h") # creating nmatrix_config.h
因此,cblas_dgemm
肯定在cblas.h
。当我查看mkmf.log时,我发现这个检查实际上找了两件事:
_cblas_dgemm
符号(?)cblas_dgemm
中的可调用cblas.h
。两项测试都失败了。我认为前者失败了,因为dir_config
需要cblas
行,可能是have_library('cblas')
。
但我无法弄清楚如何使后一个测试通过(参见gist的第24行)。是否可以将块传递给have_func
,以便它实际上用合理的参数调用它?或者还有其他方法来运行此测试吗?或者我必须正确设置dir_config
内容吗?
顺便说一句,这是第24行:
conftest.c:7:1: error: too few arguments to function ‘cblas_dgemm’
是的,当然,cblas_dgemm
需要很多参数 - 其中一些是矩阵。
令人沮丧的是,这些mkmf
函数中的任何文档都很少。
答案 0 :(得分:3)
不幸的是,have_func
看起来很难记录,但在一些挖掘中我发现了一些可能有用的东西:
[25] pry(main)> have_func("clapack_dgetrf", "/usr/local/atlas/include/clapack.h")
checking for clapack_dgetrf() in /usr/local/atlas/include/clapack.h... no
=> false
[26] pry(main)> have_func("int clapack_dgetrf", "/usr/local/atlas/include/clapack.h")
checking for int clapack_dgetrf() in /usr/local/atlas/include/clapack.h... yes
=> true
因此,基本上看起来您需要至少包含返回类型才能使have_func
正常工作。你能验证这在你的机器上有效吗?
答案 1 :(得分:0)
在mkmf.rb
的{{1}}中,后一个测试仅在前者失败时执行。当前者通过时,ruby 1.9.3p392
成功。所以你不必让后者通过。有关详细信息,请参阅have_func
中的try_func
。
仅供参考,在mkmf.rb
on 2013-04-13 11:00:25中,您似乎可以提供这样的参数:mkmf.rb
。