2015-02-13 4 views
2

Я установил lapack 3.4.2 и 3.5.0, скомпилировав их с cmake. В моем установочном каталоге lapack 3.5.0 я нахожу файл ./pkgconfig/lapack.pc, говорящий Version: 3.4.2. Так что я не уверен, что я действительно установил там рюкзак 3.5.0.Есть ли способ получить версию liblapack.a?

Есть ли способ получить версию lapack непосредственно из lib libapap.a (или LAPACK.lib под Windows)? Например, из подпрограммы в библиотеке или с помощью конкретного инструмента?

+0

Примечание: после тестирования решения Фрэнсиса, в LAPACK 3.5.0 (подтверждено ilaver) версия в './pkgconfig/lapack.pc' неверна. – Caduchon

ответ

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); 
    } 
    
+1

Спасибо большое! Это именно то, что я искал. На самом деле, я называю это через CMake. Это довольно просто с командой 'try_compile'. – Caduchon

1

Если вы не хотите, чтобы собрать все, что вы можете сделать это в 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 
+0

Спасибо за это простое решение. Но в моем контексте я не хочу требовать Python. – Caduchon