Быстрая и простая установка и использование библиотеки IT++ в Linux/Windows?
IT++ - это популярная библиотека GPL (которую сейчас называют LGPL, но пока без признаков) для научных вычислений, особенно в области телекоммуникаций. Это было рекомендовано мне моими коллегами.
Кажется, трудно установить этот кусок библиотеки в моей системе Linux/Windows. И руководство по установке кажется сложным.
У меня есть гораздо больше, чем тратить время на эту установку. Может ли кто-нибудь сэкономить мне время с помощью быстрой установки и, если возможно, привет, мир! введите инструкции?
1 ответ
TL;DR
$ wget https://sourceforge.net/projects/itpp/files/latest -O itpp.tar.bz2
$ tar -xjvf itpp.tar.bz2 && cd itpp-*
$ sudo apt-get install liblapack-dev libblas-dev libfftw3-dev
# Note: This is basic and recommended. MKL/ATLAS etc are
# platform-specialized, can give slightly better perf.
$ mkdir build1 build2
$ cd build1 # DYNAMIC (*.so file)
$ cmake ..
$ make
$ make install
$ cd bulid2 # STATIC (*.a file)
$ cmake .. -DITPP_SHARED_LIB=off
$ make
$ make install
# Note: The library installation is complete and is ready for both
# static and dynamic compilations. But the subsequent run of a
# *static compilation* is relatively more difficult, see details below.
ВСТУПЛЕНИЕ
IT++ - это мощная библиотека числовых вычислений, популярная среди исследователей, работающих в области теории связи, предоставляющая матричные конструкции. В то время как другие библиотеки матриц относительно недавнего Eigen и т. Д. Набирают все большую популярность, он по-прежнему используется благодаря своему красивому и элегантному интерфейсу, обычно сравниваемому с MATLAB. Он также обеспечивает взаимодействие с MATLAB через процедуры Mex. Я пользуюсь этим все время.
УСТАНОВКА - Пролог
К сожалению, даже несмотря на то, что инструкции по установке кажутся достаточно полными, для начинающих это очень больно, как я нахожу среди своих коллег. Причина, по-моему, заключается в том, что это не для начинающих. Я искренне надеюсь, что этот пост преодолеет этот пробел.
Я думаю, что основной источник путаницы в установке связан с зависимостями BLAS, LAPACK и FFTW, которые упоминаются наряду с необязательными, специфичными для производителя версиями BLAS/LAPACK/FFTW, такими как библиотеки MKL, ATLAS, ACML добавление к путанице того, что на самом деле должно быть сделано.
Дело в том, что большинство этих запутанных битов не являются обязательными!
Я бы рекомендовал сначала попробовать приведенные ниже быстрые инструкции и игнорировать все остальное до тех пор.
ИНСТРУКЦИЯ ПО МОНТАЖУ НА УБУНТУ
Скачать файл архива IT++
$ wget https://sourceforge.net/projects/itpp/files/latest -O itpp.tar.bz2
Извлечь и изменить каталог
$ tar -xjvf itpp.tar.bz2 && cd itpp-*
Создайте новые подкаталоги "build1" и "build2" (мы будем
cd
к ним в следующих шагах)$ mkdir build1 build2
Убедитесь, что у вас есть библиотеки LAPACK, BLAS, FFTW. Это не должно повлиять на более поздние стадии.
$ sudo apt-get install liblapack-dev libblas-dev libfftw3-dev
Здесь важное предостережение: часто говорят, что более эффективным вариантом является использование библиотеки конкретного процессора вашего процессора, такой как Intel MKL, AMD ACML, ATLAS. Но эта эффективность стоит денег - вам нужно потратить значительное время на регистрацию (для MKL), загрузку, установку и, наконец, настройку переключателей компоновщика, чтобы они включались при каждой компиляции и запуске.
Основные этапы установки:
Пожалуйста, сделайте оба шага ниже. В этом нет никакого вреда, плюс я лично считаю, что IT++ должен установить обе версии по умолчанию. Просто потому, что вы никогда не знаете, когда вам потребуется статическая компиляция в будущем. Вот почему почти каждая другая библиотека устанавливает обе версии на ваш компьютер.A. Как общая библиотека (*.so файлы)
$ cd build1 $ cmake .. $ make $ make install
Б. Как статическая библиотека (*.a файлы)
$ cd bulid2 $ cmake .. -DITPP_SHARED_LIB=off $ make $ make install
Во время cmake вы можете столкнуться с приведенными ниже ошибками, но они никогда не влияли на последующие этапы до успешного запуска отдельных программ IT++. Поэтому, пожалуйста, игнорируйте их. В будущем более поздние версии могут объявить / исправить их как ошибки. Текущая версия 4.3.1.
CMake Warning at CMakeLists.txt:192 (message):
BLAS library not found.
CMake Warning at CMakeLists.txt:196 (message):
LAPACK library not found.
CMake Warning at CMakeLists.txt:200 (message):
FFT library not found.
Проверьте свою установку с Hello,World!
Рассмотрим приведенный ниже пример программы testITPP.cpp
#include<iostream>
using namespace std;
#include<itpp/itbase.h>
using namespace itpp;
int main()
{
vec x(100); // vec == Vec<double>
double y;
x=linspace(1,100,100);
y=sum(x);
cout<<"Hello, World! \n The sum of first 100 integers is: "<<y<<endl;
}
Теперь главное при компиляции - это использовать -litpp
переключаться все время, после всех файлов.
$ g++ testITPP.cpp -litpp $./a.out Hello, World! The sum of first 100 integers is: 5050
Если ./a.out
выдает ошибки, пожалуйста, запустите sudo ldconfig
один раз обновить библиотечный кеш.
ДОПОЛНИТЕЛЬНО: Борьба со статической компиляцией:
Обратите внимание, что более ранняя компиляция использует разделяемые библиотеки по умолчанию и создает двоичный файл, который зависит от слишком большого количества других двоичных файлов на вашем ПК. То есть вышеупомянутый бинарный a.out
не может работать в другой системе Unix без установленного IT++, например. Это часто создает проблемы, особенно при отправке на университетские кластеры и серверы, которые позволяют пользователям выполнять тяжелые и длительные вычисления.
Обходной путь - использовать статическую компиляцию, избавляя от всех локальных зависимостей. Но это обычно сложно для начинающих. С IT++ в виде библиотек MKL может быть очень сложно просто знать, как статически компилировать. Хорошее резюме того, как это сделать, а также все ошибки, которые я заметил на сегодняшний день, приведены ниже.
я. Статическая компиляция с помощью Basic BLAS/LAPACK/FFTW:
Это самый простой случай. Следует отметить два особенно важных изменения. Один -litpp
становится -litpp_static
, Во-вторых, новый переключатель компиляции -static
, Первый - результат странного выбора IT++ назвать двоичные файлы как libitpp.so и libitpp_static.a.
Кроме того, в отличие от динамической компиляции, для статической компиляции может быть обязательным включение всех библиотек, кроме стандартных C++ (то есть -lc и -lm). Это в основном включает в себя -lblas -llapack -lfftw -lpthread
а также -ldl
,
В результате в вашем случае может работать одно из следующих:
$ g++ -static testITPP.cpp -litpp_static OR $ g++ -static testITPP.cpp -litpp_static -llapack -lblas -lpthread OR $ g++ sctest_PCCestimates.cpp -litpp_static \ -llapack -lblas -lgomp -lpthread \ -lgfortran -static -Wl,--allow-multiple-definition
II. Статическая компиляция с использованием BLAS/LAPACK/FFTW от MKL:
Хотя мне еще предстоит увидеть, как быстрее использовать библиотеки MKL для конкретных поставщиков, статическая компиляция может быть очень болезненной. Первоначальная установка самого MKL заняла у меня больше часа. Даже если точные инструкции не подойдут для других библиотек вендоров, они должны подготовить вас к реальным проблемам, с которыми вы столкнетесь.
Большинство из нижеперечисленного не понято сообщениями об ошибках, с которыми вы сталкиваетесь. В результате они будут очень раздражающими и болезненными для решения. Я пытаюсь перечислить их все ниже. Надеюсь, они сэкономят массу вашего драгоценного времени.
Круговая зависимость во время компиляции: первые несколько библиотек, возможно, должны быть окружены
-Wl,--start-group .... -Wl,--end-group
,В зависимости от поставщика blas/lapack/fftw вам может потребоваться найти соответствующие
libblas.a
liblapack.a
libfftw.a
или их эквиваленты, такие какlibmkl_core.a
в вашей библиотеке конкретного поставщика. Расположение каталога должно быть предоставлено с помощью переключателя-L/path/to/statics/
segmentation fault
может встретиться даже после успешной компиляции. Причиной этой назойливой проблемы является то, чтоlibpthread.a
не полностью включен. Тогда вам нужно заставить соответствующие действия, окружив выключатель-lpthread
как-Wl,--whole-archive -lpthread -Wl,--no-whole-archive
Наконец версия, которая работала для меня на Ubuntu 16.04, такова. Обратите внимание, что нет -llapack -lblas -lfftw
и т. д., поскольку они связаны в статических двоичных файлах с разными именами.
$ g++ -static \ -L/opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/ testITPP.cpp -Wl,--start-group \ -litpp_static \ -lmkl_intel_lp64 \ -lmkl_sequential \ -lmkl_core -Wl,--end-group \ -Wl,--whole-archive -lpthread -Wl,--no-whole-archive \ -ldl
Наконец, несмотря на то, что у вас есть статический двоичный файл, успешно сгенерированный выше, вы можете получить предупреждение warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
может появиться, но может быть проигнорировано, так как, по-видимому, решения не существует никогда! Это связано с общеизвестной проблемой, которая нам не нужна.
Надеясь, что кто-то еще напишет руководство по установке Windows/Visual-Studio.
Я думаю, что вы, может быть, хотели что-то подобное?
sudo apt-get install libitpp-dev libitpp8v5
Он использует базовый процесс установки ubuntu. Я использую ubuntu 18.04 LTS.