我有一个 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.h
中的可调用cblas_dgemm
。
两项测试均失败。我认为前者失败了,因为我需要 cblas
的 dir_config
行,也许还有 have_library('cblas')
。
但我不知道如何使后一个测试通过(参见 gist 的第 24 行)。是否可以将一个 block 传递给have_func
,以便它实际上使用合理的参数调用它?或者还有其他方法来运行这个测试吗?或者我是否必须正确设置 dir_config
内容?
顺便说一句,这是第 24 行:
conftest.c:7:1: error: too few arguments to function ‘cblas_dgemm’
是的,当然,cblas_dgemm
需要许多参数——其中一些是矩阵。
令人沮丧的是,关于这些 mkmf
函数的文档非常少。
最佳答案
不幸的是,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
正常工作。您能否验证这是否适用于您的计算机?
关于c - 当测试函数需要参数时,have_func 的正确用法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15726199/