Как я уже говорил в предыдущем вопросе, Я пытаюсь запустить скрипт python, который использует код Fortran, обернутый f2py, на удаленном сервере. Если я скомпилирую модуль f2py локально на своем компьютере, а затем запущу скрипт на сервере, я получу следующую ошибку:
ImportError: liblapack.so.3: невозможно открыть общий объектный файл: нет такого файла или каталога
Это логично, так как lapack и blas не установлены на удаленном сервере, и, к сожалению, у меня нет привилегий суперпользователя для их установки. Мне интересно, могу ли я исправить это, используя статическую ссылку. В вики GNU указано, что
Один из способов избежать этого (дополнительные идеи можно найти на странице исполняемых файлов) — использовать так называемое статическое связывание, доступное с опцией
-static
. Затем Gfortran помещает код библиотеки в созданную программу, что позволяет ей работать без библиотеки (например, на компьютере, где gfortran не установлен).
Это звучит как именно то, что мне нужно. Если необходимые файлы библиотеки включены в модуль f2py, то мне не понадобятся модули lapack и blas на удаленном сервере, и я могу просто запустить его как есть. Однако я не уверен, что это статическое связывание действительно работает с f2py. В настоящее время я бегаю,
python -m numpy.f2py -llapack -lblas -c --fcompiler=gnu95 --compiler=unix signature_file.pyf
object_files.o
object_files.o
означает все взаимозависимые файлы Fortran, скомпилированные в объектные файлы, т.е. я запускал
gfortran -c -llapack -lblas object_file.F90
на всех соответствующих файлах. Теперь я хотел бы сделать это с помощью статической ссылки, но как? Я пытался добавить -static при компиляции объектных файлов, но это ничего не изменило. Я также пытался добавить -static к вызову f2py, но это просто дает неизвестную ошибку опции.
LD_LIBRARY_PATH
. Что касается статической компоновки, это должно быть возможно, но учтите, что f2py в любом случае создает динамическую библиотеку. Тем не менее, я считаю, что вы можете связать статическую версию blas/lapack для сборки этой dll (может быть, заставив правильный файлliblapack.a
вместо просто-llapack
? - кстати, если статические библиотеки установлены на вашем локальном компьютере) - person Jean-Claude Arbaut   schedule 22.12.2020