Как правильно использовать 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, я вижу, что эта проверка на самом деле ищет две вещи:
-
_cblas_dgemm
где-то символ (?) - вызываемый
cblas_dgemm
вcblas.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
функции.
2 ответа
К сожалению похоже 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
работать правильно. Можете ли вы проверить, что это работает на вашем компьютере?
В mkmf.rb
из ruby 1.9.3p392
, Последний тест выполняется только в случае неудачи первого. Когда первый проходит, have_func
Успехи. Так что вам не нужно делать последний проход. Ссылаться на try_func
в mkmf.rb
Больше подробностей.
Просто для информации, в mkmf.rb
2013-04-13 11:00:25, кажется, вы можете привести аргументы, как это: have_func("some_func(some_arg, another_arg)", ["foo.h"])
,