C语言 当测试函数需要参数时,如何正确使用have_func ?



我有一个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时,我看到这个检查实际上查找两件事:

  1. _cblas_dgemm符号在某处(?)
  2. cblas.h中可调用的cblas_dgemm

两个测试都失败。我认为前者是失败的,因为我需要dir_configcblas,也许have_library('cblas')

但是我不知道如何使后一个测试通过(参见要点的第24行)。是否有可能将块传递给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正常工作。您能验证这在您的机器上是否有效吗?

ruby 1.9.3p392mkmf.rb中,只有前一个测试失败才执行后一个测试。当前者通过时,have_func成功。所以你不必通过后一种方法。详细信息请参考mkmf.rb中的try_func

仅供参考,在mkmf.rb 2013-04-13 11:00:25,似乎你可以给出这样的参数:have_func("some_func(some_arg, another_arg)", ["foo.h"]) .

相关内容

最新更新