Есть ли способ получить версию liblapack.a?
Я установил Lapack 3.4.2 и 3.5.0, скомпилировав их с помощью cmake. В моем установочном каталоге Lapack 3.5.0 я нахожу файл ./pkgconfig/lapack.pc
поговорка Version: 3.4.2
, Так что я не уверен, что я действительно установил Lapack 3.5.0 там.
Есть ли способ получить версию lapack непосредственно из lib liblapack.a (или LAPACK.lib под Windows)? Например, из рутины в библиотеке или с помощью специального инструмента?
2 ответа
Решение
Функция lapack ilaver()
сделан для вас!
Его прототип говорит сам за себя:
subroutine ilaver ( integer VERS_MAJOR,
integer VERS_MINOR,
integer VERS_PATCH
)
Вот две программы, демонстрирующие, как его использовать:
в программе на Фортране, соблюдается
gcc main.f90 -o main -llapack
PROGRAM VER IMPLICIT NONE INTEGER major, minor, patch CALL ilaver( major,minor, patch ) WRITE(*,*) "LAPACK ",major,".",minor,".",patch END PROGRAM VER
В программе AC, составленной
gcc main.c -o main -llapack
#include <stdio.h> extern ilaver_(int* major,int* minor,int* patch); int main() { int major=0; int minor=0; int patch=0; ilaver_(&major,&minor,&patch); printf("lapack %d.%d.%d\n",major,minor,patch); }
Если вы не хотите ничего компилировать, вы можете сделать это в Python:
ATL-MBP-MAC4:~ dmcdonald$ python3
Python 3.4.2 (default, Jan 29 2015, 06:34:22)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from ctypes import *
>>> from ctypes.util import *
>>> lapack = CDLL(find_library("lapack"))
>>> major, minor, patch = c_int(), c_int(), c_int()
>>> lapack.ilaver(byref(major), byref(minor), byref(patch))
0
>>> print("{0}.{1}.{2}".format(major.value, minor.value, patch.value))
3.2.1