Ранее мы рассмотрели способ сборки исполняемого файла и библиотеки Gmsh'а из исходных файлов под ОС Windows. Сегодня остановимся на особенностях этой сборки под системами из семейства Unix. Несмотря на то, что таких систем довольно много, процедура сборки для них идентична. По крайней мере, все, что будет приводится далее, проверялось мной на двух платформах: 32-битная Ubuntu 10.04 Lucid Lynx (с графикой) и 64-битная SUSE Linux Enterprise Server 11 (без графики).
Вначале мы рассмотрим поэтапно процесс сборки Gmsh'а под Ubuntu, которая будет выступать в роли домашней ОС, в которой вы имеете права суперпользователя.
1. CMake
Начиная с версии 2.4.1, Gmsh использует программу CMake для конфигурирования своего Makefile. При этом необходимо, чтобы CMake имел версию не ниже, чем 2.6. Если у вас в системе установлен CMake необходимой версии, переходите ко второму этапу. Проверить это просто. Запустите терминал (Приложения -> Стандартные -> Терминал) и наберите в командной строке
Если система выдала путь, где установлен CMake, проверьте его версию, набрав
Если же система ничего не выдала, значит CMake у вас не установлен. Идем дальше.
Способов установки CMake как минимум 3:
Установка из репозитория проходит в автоматическом режиме без нашего участия. Результаты установки проверяем теми же командами, что и раньше
Кроме программы cmake, для конфигурирования Makefile'ов Gmsh'а может понадобиться утилита ccmake. Ее также можно установить из репозитория (она числится под именем cmake-curses-gui).
2. BLAS, LAPACK
Прежде, чем приступить к сборке Gmsh'а, необходимо отметить, что он зависит от большого количество сторонних пакетов, которые также необходимо установить (если, конечно, вам нужны соответствующие опции Gmsh'а). Приведу пример. Допустим, вы хотите, чтобы Gmsh имел графический интерфейс (а поскольку Ubuntu имеет графическую оболочку, это желание вполне естественно). Для этого вам нужно будет установить библиотеку FLTK, на которой построен интерфейс Gmsh'а. Если же вам нужна только библиотека Gmsh (или исполняемый файл без графического интерфейса), FLTK можно не устанавливать. Gmsh прекрасно работает и без нее. Однако, на чистеньких системах, вроде моей, не установлены даже библиотеки BLAS и LAPACK. Gmsh сконфигурируется и без этих опций, но вот только работать не будет. А именно - не построит сетку. Поэтому описание сборки Gmsh'а далее организуем так: установим BLAS и LAPACK, сконфигурируем Gmsh, соберем и установим его, а затем опишем те пакеты и соответствующие им опции, которые можно установить дополнительно.
BLAS и LAPACK - это довольно старые и проверенные библиотеки для линейной алгебры, поэтому, конечно, устанавливаем их также из репозитория. Для этого заходим в менеджер пакетов Synaptic (Система -> Администрирование) и ищем 'libblas' и 'liblapack'. После установки можете проверить, что библиотеки на месте:
3. Gmsh
Итак, приступаем к самому интересному. Скачиваем отсюда архив с исходниками той версии Gmsh'а, которую вы хотите установить. Распаковываем архив и в полученной директории создаем каталог build
Для того, чтобы сконфигурировать Gmsh по умолчанию, введите просто
То, что в результате этой команды появится на экране, нужно внимательно просмотреть. У меня, например, было выдано сообщение об ошибке в связи с тем, что не был установлен компилятор Фортрана. Если ошибок нет, посмотрите на список опций, с которыми Gmsh будет собираться:
Gmsh has been configured for Linux with the following options: Ann Bamg Blas Chaco DIntegration Dlopen Gmm Kbipack Lapack MathEx Mesh Metis Mpeg Netgen Parser Plugins Post Solver Tetgen
Хорошенько посмотрите, есть ли у вас в опциях Blas и Lapack. Если нет, возможно, CMake не видит их библиотеки. В этом случае проверьте системную переменную LD_LIBRARY_PATH
Если эта переменная пуста, добавьте в нее путь до библиотек Blas и Lapack
Чтобы при каждом новом запуске терминала не инициализировать эту переменную, добавьте приведенную выше строку в файл .bashrc, который находится в домашней директории.
При необходимости, можно явно указать, что мы хотим включить опции Blas и Lapack:
или, используя утилиту ccmake
Найдите строку ENABLE_BLAS_LAPACK и убедитесь, что ее значение ON (в противном случае переключите значение, нажав Enter).
После того, как вы с этим разобрались, обратите внимание на следующие строки:
C compiler: /usr/bin/gcc
C++ compiler: /usr/bin/c++
Build type: RelWithDebInfo
Install prefix: /usr/local
Если вы хотите изменить тип сборки или директорию установки, то вам необходимо изменить переменные CMAKE_BUILD_TYPE и CMAKE_INSTALL_PREFIX с помощью утилиты ccmake или через аргументы команды cmake.
Следующий шаг - сборка исполняемого файла
статической библиотеки
или динамической библиотеки
Если вы имеете многоядерный процессор, вы можете ускорить этот этап, набрав
Здесь число 4 означает количество инструкций, которые будут исполняться одновременно. Лучше всего, если оно равняется количеству ядер. Поэтому, если у вас двухядерный процессор, наберите make -j2
Последний шаг - установка в соотвествующие директории
Теперь можно убедиться, что Gmsh установлен как надо, заодно проверив его версию
Можно также проверить все опции, с которыми был собран Gmsh, а также другую полезную информацию
Чтобы протестировать Gmsh, создадим небольшой файл simple.geo:
Построим сетку
В процессе построения сетки Gmsh выдает кучу служебной информации. Чтобы информация не выводилась, введите
Теперь, как в предыдущем посте, запустим простенькую программу, чтобы проверить работоспособность библиотеки Gmsh. Как и ранее воспользуемся файлом mainSimple.cpp из директории gmsh-source/utils/api-demos.
Компилируем командой
Линкуем командой
Запускаем так
После этого я получил ошибку "./mainSimple: error while loading shared libraries: libGmsh.so: cannot open shared object file: No such file or directory". Если с вами произошло то же самое, запустите команду ldconfig, которая создает необходимые привязки и кэш для динамических библиотек. Конечно, запускать ее нужно от имени суперпользователя
После этого проблема с запуском у меня исчезла. Все работает.
4. FLTK
FLTK (Fast Light ToolKit) - это пакет библиотек для создания графических приложений, в том числе - пользовательских интерфейсов. Что-то вроде MFC от Microsoft или Qt от Nokia. Конечно, по сравнению с ними FLTK значительно беднее в ассортименте функций, зато он "быстрее и легче" (по крайней мере, так говорится в названии самого пакета). Поэтому он часто используется для создания графических интерфейсов наукоемких приложений, к которым Gmsh, безусловно, относится. Однако, как говорилось выше, наличие интерфейса для Gmsh'а опционально, т.е. непосредственно на генерацию сетки это не влияет. Тем не менее, иногда очень полезно посмотреть на сетку, построить сечения. А если рассматривать Gmsh еще и как визуализатор полученных результатов, то тут без FLTK никак не обойтись.
Поскольку в репозитории я нашел FLTK версии 1.1, предлагаю не усложнять себе жизнь и установить FLTK прямо оттуда. Я устанавливал пакеты libfltk1.1 и libfltk1.1-dev.
Теперь для того, чтобы Gmsh имел графический интерфейс, его нужно собрать с поддержкой FLTK. Для этого нужно просто переконфигурировать и пересобрать Gmsh из директории build
Gmsh автоматически подключит опцию FLTK (и другие, связанные с ней), если найдет соответствующие библиотеки. Чтобы изменить опцию принудительно, введите
или воспользуйтесь утилитой ccmake.
Несмотря на простоту указанных операций, вы можете столкнуться с неожиданными ошибками. Так на этапе конфигурирования Gmsh'а с поддержкой FLTK у меня вылезла ошибка о том, что отключена поддержка OpenGL. Чтобы эту поддержку включить, я установил пакет libglu1-mesa-dev, после чего Gmsh сконфигурировался как надо.
После сборки и установки, запускаем Gmsh
Вот, что мы увидим
Кстати, теперь это скрин окон Gmsh'а версии 2.5.0, а не 2.4.2, которую я рассматривал в предыдущих постах.
5. OpenCASCADE
OpenCASCADE (OCC) или, что то же самое, OpenCASCADE Technology (OCCT) - это набор библиотек для моделирования геометрических фигур, визуализации и т.д. На OCCT построено большое количество CAD систем, некоторые из которых рассматривались в посте Триангуляция сложных моделей. Поскольку в подобных CAD системах удобно проектировать геометрию модели, было бы замечательно иметь возможность загрузить такую модель в Gmsh для построения сетки. И такая возможность имеется. Но для этого Gmsh должен быть собран с поддержкой OCCT. Все логично.
В репозитории имеется версия OpenCASCADE 6.3.0. которая, конечно, уже успела значительно устареть, но, я думаю, для наших целей подойдет. Устанавливаем пакет libopencascade-dev.
После этого по известной схеме переконфигурируем Gmsh. У меня CMake автоматически подцепил все библиотеки OpenCASCADE, поэтому поддержка OCC также включилась автоматически. Если у вас она отключена, то ее можно включить вручную аргументом -DENABLE_OCC=1, или, естественно, с помощью ccmake. Хотя здесь, конечно, главное, чтобы CMake увидел, где лежат библиотеки.
Процесс сборки и установки также прошел без приключений.
Чтобы проверить, что поддержка OCC теперь работает, загрузим какой-нибудь .BRep файл, взятый например, из галереи сайта opencascade.org. Как я писал ранее, заргузку геометрии в формате BRep можно осуществить, передав имя файла просто через командную строку
Вот, что, в результате, у меня получилось
Несмотря на несколько ошибок, которые Gmsh выдал в процессе загрузки модели и построения поверхностной сетки, мы видим, что, в общем и целом, все работает. И это не может не радовать.
Вначале мы рассмотрим поэтапно процесс сборки Gmsh'а под Ubuntu, которая будет выступать в роли домашней ОС, в которой вы имеете права суперпользователя.
1. CMake
Начиная с версии 2.4.1, Gmsh использует программу CMake для конфигурирования своего Makefile. При этом необходимо, чтобы CMake имел версию не ниже, чем 2.6. Если у вас в системе установлен CMake необходимой версии, переходите ко второму этапу. Проверить это просто. Запустите терминал (Приложения -> Стандартные -> Терминал) и наберите в командной строке
~$ which cmake
Если система выдала путь, где установлен CMake, проверьте его версию, набрав
~$ cmake --version
Если же система ничего не выдала, значит CMake у вас не установлен. Идем дальше.
Способов установки CMake как минимум 3:
- установить CMake из репозитория Ubuntu (используя команду 'sudo apt-get install cmake' или через менеджер пакетов Synaptic (в меню Система -> Администрирование))
- скачать установочный файл с сайта CMake
- собрать CMake из исходников, скачанных с сайта CMake
Установка из репозитория проходит в автоматическом режиме без нашего участия. Результаты установки проверяем теми же командами, что и раньше
~$ which cmake
/usr/bin/cmake
~$ cmake --version
cmake version 2.8.0
/usr/bin/cmake
~$ cmake --version
cmake version 2.8.0
Кроме программы cmake, для конфигурирования Makefile'ов Gmsh'а может понадобиться утилита ccmake. Ее также можно установить из репозитория (она числится под именем cmake-curses-gui).
2. BLAS, LAPACK
Прежде, чем приступить к сборке Gmsh'а, необходимо отметить, что он зависит от большого количество сторонних пакетов, которые также необходимо установить (если, конечно, вам нужны соответствующие опции Gmsh'а). Приведу пример. Допустим, вы хотите, чтобы Gmsh имел графический интерфейс (а поскольку Ubuntu имеет графическую оболочку, это желание вполне естественно). Для этого вам нужно будет установить библиотеку FLTK, на которой построен интерфейс Gmsh'а. Если же вам нужна только библиотека Gmsh (или исполняемый файл без графического интерфейса), FLTK можно не устанавливать. Gmsh прекрасно работает и без нее. Однако, на чистеньких системах, вроде моей, не установлены даже библиотеки BLAS и LAPACK. Gmsh сконфигурируется и без этих опций, но вот только работать не будет. А именно - не построит сетку. Поэтому описание сборки Gmsh'а далее организуем так: установим BLAS и LAPACK, сконфигурируем Gmsh, соберем и установим его, а затем опишем те пакеты и соответствующие им опции, которые можно установить дополнительно.
BLAS и LAPACK - это довольно старые и проверенные библиотеки для линейной алгебры, поэтому, конечно, устанавливаем их также из репозитория. Для этого заходим в менеджер пакетов Synaptic (Система -> Администрирование) и ищем 'libblas' и 'liblapack'. После установки можете проверить, что библиотеки на месте:
~$ find /usr -name "libblas*"
~$ find /usr -name "liblapack*"
~$ find /usr -name "liblapack*"
3. Gmsh
Итак, приступаем к самому интересному. Скачиваем отсюда архив с исходниками той версии Gmsh'а, которую вы хотите установить. Распаковываем архив и в полученной директории создаем каталог build
~$ tar xfz gmsh-source.tgz
~$ mkdir gmsh-source/build
~$ cd gmsh-source/build
~$ mkdir gmsh-source/build
~$ cd gmsh-source/build
Для того, чтобы сконфигурировать Gmsh по умолчанию, введите просто
~/gmsh-source/build$ cmake ..
То, что в результате этой команды появится на экране, нужно внимательно просмотреть. У меня, например, было выдано сообщение об ошибке в связи с тем, что не был установлен компилятор Фортрана. Если ошибок нет, посмотрите на список опций, с которыми Gmsh будет собираться:
Gmsh has been configured for Linux with the following options: Ann Bamg Blas Chaco DIntegration Dlopen Gmm Kbipack Lapack MathEx Mesh Metis Mpeg Netgen Parser Plugins Post Solver Tetgen
Хорошенько посмотрите, есть ли у вас в опциях Blas и Lapack. Если нет, возможно, CMake не видит их библиотеки. В этом случае проверьте системную переменную LD_LIBRARY_PATH
~$ echo $LD_LIBRARY_PATH
Если эта переменная пуста, добавьте в нее путь до библиотек Blas и Lapack
~$ export LD_LIBRARY_PATH="/usr/lib"
Чтобы при каждом новом запуске терминала не инициализировать эту переменную, добавьте приведенную выше строку в файл .bashrc, который находится в домашней директории.
При необходимости, можно явно указать, что мы хотим включить опции Blas и Lapack:
~/gmsh-source/build$ cmake -DENABLE_BLAS_LAPACK=1 ..
или, используя утилиту ccmake
~/gmsh-source/build$ ccmake ..
Найдите строку ENABLE_BLAS_LAPACK и убедитесь, что ее значение ON (в противном случае переключите значение, нажав Enter).
После того, как вы с этим разобрались, обратите внимание на следующие строки:
C compiler: /usr/bin/gcc
C++ compiler: /usr/bin/c++
Build type: RelWithDebInfo
Install prefix: /usr/local
Если вы хотите изменить тип сборки или директорию установки, то вам необходимо изменить переменные CMAKE_BUILD_TYPE и CMAKE_INSTALL_PREFIX с помощью утилиты ccmake или через аргументы команды cmake.
Следующий шаг - сборка исполняемого файла
~/gmsh-source/build$ make
статической библиотеки
~/gmsh-source/build$ make lib
или динамической библиотеки
~/gmsh-source/build$ make shared
Если вы имеете многоядерный процессор, вы можете ускорить этот этап, набрав
~/gmsh-source/build$ make { | lib | shared } -j4
Здесь число 4 означает количество инструкций, которые будут исполняться одновременно. Лучше всего, если оно равняется количеству ядер. Поэтому, если у вас двухядерный процессор, наберите make -j2
Последний шаг - установка в соотвествующие директории
~/gmsh-source/build$ sudo make { | lib | shared} install
Теперь можно убедиться, что Gmsh установлен как надо, заодно проверив его версию
~$ gmsh -version
Можно также проверить все опции, с которыми был собран Gmsh, а также другую полезную информацию
~$ gmsh -info
Чтобы протестировать Gmsh, создадим небольшой файл simple.geo:
Point(1) = {0, 0, 0};
Point(2) = {1, 0, 0};
Point(3) = {0, 1, 0};
Line(1) = {1, 2};
Line(2) = {2, 3};
Line(3) = {3, 1};
Line Loop(4) = {1, 2, 3};
Plane Surface(1) = {4};
Physical Surface(100) = {1};
Point(2) = {1, 0, 0};
Point(3) = {0, 1, 0};
Line(1) = {1, 2};
Line(2) = {2, 3};
Line(3) = {3, 1};
Line Loop(4) = {1, 2, 3};
Plane Surface(1) = {4};
Physical Surface(100) = {1};
Построим сетку
~$ gmsh -2 simple.geo
В процессе построения сетки Gmsh выдает кучу служебной информации. Чтобы информация не выводилась, введите
~$ gmsh -2 simple.geo -v 0
Теперь, как в предыдущем посте, запустим простенькую программу, чтобы проверить работоспособность библиотеки Gmsh. Как и ранее воспользуемся файлом mainSimple.cpp из директории gmsh-source/utils/api-demos.
Компилируем командой
~/../api-demos$ g++ -c mainSimple.cpp -I /usr/local/include/gmsh
Линкуем командой
~/../api-demos$ g++ -L /usr/local/lib -lGmsh mainSimple.o -o mainSimple
Запускаем так
~/../api-demos$ ./mainSimple
После этого я получил ошибку "./mainSimple: error while loading shared libraries: libGmsh.so: cannot open shared object file: No such file or directory". Если с вами произошло то же самое, запустите команду ldconfig, которая создает необходимые привязки и кэш для динамических библиотек. Конечно, запускать ее нужно от имени суперпользователя
~/gmsh-source/utils/api-demos$ sudo ldconfig
После этого проблема с запуском у меня исчезла. Все работает.
4. FLTK
FLTK (Fast Light ToolKit) - это пакет библиотек для создания графических приложений, в том числе - пользовательских интерфейсов. Что-то вроде MFC от Microsoft или Qt от Nokia. Конечно, по сравнению с ними FLTK значительно беднее в ассортименте функций, зато он "быстрее и легче" (по крайней мере, так говорится в названии самого пакета). Поэтому он часто используется для создания графических интерфейсов наукоемких приложений, к которым Gmsh, безусловно, относится. Однако, как говорилось выше, наличие интерфейса для Gmsh'а опционально, т.е. непосредственно на генерацию сетки это не влияет. Тем не менее, иногда очень полезно посмотреть на сетку, построить сечения. А если рассматривать Gmsh еще и как визуализатор полученных результатов, то тут без FLTK никак не обойтись.
Поскольку в репозитории я нашел FLTK версии 1.1, предлагаю не усложнять себе жизнь и установить FLTK прямо оттуда. Я устанавливал пакеты libfltk1.1 и libfltk1.1-dev.
Теперь для того, чтобы Gmsh имел графический интерфейс, его нужно собрать с поддержкой FLTK. Для этого нужно просто переконфигурировать и пересобрать Gmsh из директории build
~/gmsh-source/build$ cmake ..
~/gmsh-source/build$ sudo make { | lib | shared } install
~/gmsh-source/build$ sudo make { | lib | shared } install
Gmsh автоматически подключит опцию FLTK (и другие, связанные с ней), если найдет соответствующие библиотеки. Чтобы изменить опцию принудительно, введите
~/gmsh-source/build$ cmake -DENABLE_FLTK=1 ..
или воспользуйтесь утилитой ccmake.
Несмотря на простоту указанных операций, вы можете столкнуться с неожиданными ошибками. Так на этапе конфигурирования Gmsh'а с поддержкой FLTK у меня вылезла ошибка о том, что отключена поддержка OpenGL. Чтобы эту поддержку включить, я установил пакет libglu1-mesa-dev, после чего Gmsh сконфигурировался как надо.
После сборки и установки, запускаем Gmsh
~$ gmsh simple.msh
Вот, что мы увидим
Кстати, теперь это скрин окон Gmsh'а версии 2.5.0, а не 2.4.2, которую я рассматривал в предыдущих постах.
5. OpenCASCADE
OpenCASCADE (OCC) или, что то же самое, OpenCASCADE Technology (OCCT) - это набор библиотек для моделирования геометрических фигур, визуализации и т.д. На OCCT построено большое количество CAD систем, некоторые из которых рассматривались в посте Триангуляция сложных моделей. Поскольку в подобных CAD системах удобно проектировать геометрию модели, было бы замечательно иметь возможность загрузить такую модель в Gmsh для построения сетки. И такая возможность имеется. Но для этого Gmsh должен быть собран с поддержкой OCCT. Все логично.
В репозитории имеется версия OpenCASCADE 6.3.0. которая, конечно, уже успела значительно устареть, но, я думаю, для наших целей подойдет. Устанавливаем пакет libopencascade-dev.
После этого по известной схеме переконфигурируем Gmsh. У меня CMake автоматически подцепил все библиотеки OpenCASCADE, поэтому поддержка OCC также включилась автоматически. Если у вас она отключена, то ее можно включить вручную аргументом -DENABLE_OCC=1, или, естественно, с помощью ccmake. Хотя здесь, конечно, главное, чтобы CMake увидел, где лежат библиотеки.
Процесс сборки и установки также прошел без приключений.
Чтобы проверить, что поддержка OCC теперь работает, загрузим какой-нибудь .BRep файл, взятый например, из галереи сайта opencascade.org. Как я писал ранее, заргузку геометрии в формате BRep можно осуществить, передав имя файла просто через командную строку
~$ gmsh 18_f1.brep
Вот, что, в результате, у меня получилось
Несмотря на несколько ошибок, которые Gmsh выдал в процессе загрузки модели и построения поверхностной сетки, мы видим, что, в общем и целом, все работает. И это не может не радовать.
Комментариев нет:
Отправить комментарий