У меня есть extconf.rb
со следующими строками:Какое правильное использование has_func, когда функции тестирования нуждаются в аргументах?
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')
.
Но я не могу понять, как пройти последний тест (см. Строку 24 из gist). Можно ли передать блок до have_func
, чтобы он действительно называет его разумными аргументами? Или есть другой способ запустить этот тест? Или мне нужно правильно настроить dir_config
?
Вот строка 24, кстати:
conftest.c:7:1: error: too few arguments to function ‘cblas_dgemm’
И да, конечно, cblas_dgemm
нужно много аргументов - некоторые из них матрицы.
Это расстраивает то, как мало документации есть на любом из этих mkmf
функций.
Вы пробовали просто 'has_func ('cblas_dgemm')'? Это может просто попытаться связать что-то, что ссылается на функцию 'cblas_dgemm', без привлечения заголовка вообще. Сначала вам нужно выяснить соответствующие «-l» переключатели. –
У меня есть, и это работает в некоторых случаях, но отсутствие документации делает почти невозможным предсказать, когда это произойдет. –
Почему никто не потрудился переписать 'mkmf'? Он кажется хорошим кандидатом на переписывание. –