c - 当测试函数需要参数时,have_func 的正确用法是什么?

标签 c ruby atlas extconf.rb mkmf

我有一个 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

两项测试均失败。我认为前者失败了,因为我需要 cblasdir_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/

相关文章:

child 使用管道进行计算

ruby - 如何将 String 对象转换为 Hash 对象?

ruby-on-rails - AWS Elasticbeanstalk 应用程序的 Rails : How to get puma 3. 11?

python - RedHat 上 Scipy 和 Scikit-learn 中的 undefined symbol

ios - 如何使用 GLKit 围绕图集中 Sprite 的中心旋转

c - HMAC_SHA256 为 AWS 示例生成不正确的签名

c - 在没有按位运算符的情况下执行计算

gcc - ATLAS undefined reference

c++ - glBindMultiTexture 和 glEnableIndexed 的语义?

java - 浏览器内图像捕获脚本/引擎/解决方案