2

我有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_dgemmcblas.h.

两个测试都失败了。我认为前者失败了,因为我需要一条dir_config线cblas,也许还有一条线have_library('cblas')

但我不知道如何使后一个测试通过(参见要点的第 24 行)。是否可以将一个块传递给它,have_func以便它实际上用合理的参数调用它?还是有其他方法可以运行此测试?还是我必须dir_config正确设置这些东西?

顺便说一下,这是第 24 行:

conftest.c:7:1: error: too few arguments to function ‘cblas_dgemm’

是的,当然,cblas_dgemm需要很多参数——其中一些是矩阵。

mkmf令人沮丧的是,关于这些功能的文档很少。

4

2 回答 2

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正常工作。您能否验证这在您的机器上是否有效?

于 2014-04-22T20:19:31.607 回答
0

mkmf.rb,ruby 1.9.3p392后一个测试只有在前者失败时才会执行。当前者过去时,have_func成功。所以你不必让后者通过。有关详细信息,请参阅try_func中。mkmf.rb

仅供参考,在mkmf.rb2013-04-13 11:00:25中,您似乎可以给出这样的论点:have_func("some_func(some_arg, another_arg)", ["foo.h"]).

于 2013-05-03T13:09:22.760 回答