Сборка и запуск примера на Geant4

Запуск и сборка примера на Geant4

В этом уроке разберем как собирать и запускать проект на Geant4 для Ubuntu, линукса. Для Windows разбор будет опубликован позже, однако принцип тот же самый.

Подготовка к компиляции примера на Geant4

Следует понимать, что проект или программа Geant4 работает используя его как библиотеку, берет из него необходимые классы, данные сечений, параметров частиц и так далее. Поэтому, для компиляции нужно предварительно указать где лежит Джант, и все необходимые исходные данные.

Для данного разбора возьмем установку по пути

/home/black/geant4/install_path/geant4.10.03-build

описание которой было дано ранее в этой статье.

Итак, нам нужно указать директорию, в которой компилятор сможет найти все необходимые пути

/home/black/geant4/install_path/geant4.10.03.p03-install/lib/Geant4-10.3.3

Для примера, директория другой версии Geant

/home/black/geant4/install_path/geant4.10.05-install/lib/Geant4-10.5.1

Схематично этот путь выглядит так:

install path/installed Geant4 folder/lib/Geant4-10.x.x

Создание файла CmakeLists.txt для CMAKE

Для сборки проекта используется CMAKE, это специальная утилита для автоматической сборки приложений. Она существенно упрощает сборку и компиляцию программ.

В файлах примеров с этого сайта и в примерах Geant4 присутствует файл CmakeLists.txt, который необходим для работы CMAKE. В нем присутствуют инструкции для сборки примеров. Перед сборкой убедитесь, что в системе присутствует установленный CMAKE нужной версии.

Проверка версии cmake
Проверка версии CMAKE, как правило нужна версия выше 2.6

В примерах требуется CMAKE версии новее 2.6. В качестве исходника можно использовать файл из статьи о простом примере на Geant4.

При минимальной правке стоит обратить внимание только на следующие строчки из CmakeLists.txt файла:

# Расположение исходного кода и заголовочных файлов этого проекта
# Заголовочные файлы подключаются, значит что они будут показаны в
# IDE - среде разработки
file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cpp)
file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh)

В частности /src/*.cpp — в какой папке в проекте находятся файлы исходного кода и их расширение, а так же /include/*.hh — в какой директории находятся заголовочные файлы.

И строчки

# Добавление исполняемого файла и линковка его с библиотеками Geant4
 add_executable(example1 example1.cpp ${sources} ${headers})
   target_link_libraries(example1 ${Geant4_LIBRARIES})

где следует поменять название основного файла проекта, если у вас он отличается от example1.cpp. И таким образом уже сформированный файл CmakeLists.txt подойдет практически под любой проект для Джанта.

Сборка программы Geant4

Итак, немножко затронем культуру программирования, как компилировать программу с CMAKE правильно.

Пусть наш проект лежит где-то в папке example1_rus, для совсем новичков приведем полный путь

/home/black/geant4/projects/example1_rus

Т.е. пусть все наши проекты будут в папке

/home/black/geant4/projects/

и в дальнейшем будем работать в ней, но команды попробуем сделать все относительные, что бы не зависеть от того, где лежит проект.

Итак, важное правило программирования: директории, где находятся исходники проекта, там, где собирается проект и где он устанавливается, должны быть разными!

В статье, где описывается установка Geant4, сделано по этому принципу.

Мы пока просто учимся и устанавливать проект не будем, поэтому пока обойдемся двумя папками — исходников и сборки.

Итак, рядом с папкой, где лежат исходники, создадим папку для сборки.

  • Исходники example1_rus
  • Создаем папку сборки example1_rus-build и в неё заходим.

В консоли команды выглядят так:

cd /home/black/geant4/projects

создаем папку

mkdir example1_rus-build

в нее заходим

cd example1_rus-build/

можем проверить что находимся в нужной папке командой

pwd
Подготовка к компилированию программы
Подготовка к компилированию программы на Geant4

Далее собираем проект с помощью команды CMAKE

cmake -DGeant4_DIR=/home/black/geant4/install_path/geant4.10.05-install/lib/Geant4-10.3.3 ../example1_rus

где через параметр -DGeant4_DIR передаем папку из устанвоки Geant4, в которой находятся нужные файлы для сборки проекта. Вторым параметром указываем папку с исходниками. Так как она находится на директорию выше, указываем выйти выше и зайти в папку с исходниками example1_rus.

Далее компилируем

make

Можем компилировать в много поточном режиме

make -j4

В результате сборки появится исполняемый файл проекта — программа, про её запуск читайте далее.

Запуск программы на Geant4

Для запуска исполняемого файла необходимо задать переменные среды для Geant4.

Для этого в консоли задаем команду

source /home/black/geant4/install_path/geant4.10.03.p03-install/bin/geant4.sh

Если у вас другая версия Geant4, то схема команды

source path to Geant4 install/bin/geant4.sh

Пройдемся по основным ошибкам запуска

Не заданы переменные среды

Если просто запустить исполняемый файл — экзешник или бинарник, зачастую появится ошибка.

black@black-bycel:~/geant4/projects/example1_rus-build$ ./example1
 ./example1: error while loading shared libraries: libG4processes.so: cannot open shared object file: No such file or directory

Для исправления нужно указать на файл geant4.sh в папке bin/ в директории установки

source path to Geant4 install/bin/geant4.sh

Т.е. открываем консоль, выполняем команду выше, исправив путь установки Джанта на свой, и в этой же консоли запускать программу.

Что бы не нужно было постоянно задавать переменные среды, можно эту команду поместить в файл .bashrc в родительском каталоге вашего пользователя.

У меня например в

/home/black

Имя пользователя у меня black (производная от моего ника black-bycel, что по беларуски звучит как «чорны бусел» (ударение на о и у) или по русски «чёрный аист». Это редкий вид аиста, живущего на Полесье, в глухих лесах и болотах, где людей практически нет.)

Нет внешних дополнительных данных

Иногда не до конца скачиваются дополнительные данные Geant4, необходимые для моделирования. Можно много времени потратить разбираясь в чем проблема, однако самый простой и быстрый рецепт — очищаем все содержимое папок сборки и установки Geant4. Переустанавливаем его и не забываем указать параметр -DGEANT4_INSTALL_DATA=ON для CMAKE.

«Мистическое» поведение программы в процессе разработки

Иногда бывает «мистическое» поведение, когда программа то не видит новые файлы, то какие то классы, или ведет себя совершенно не понятно.

Возможно это проблема в коде, но очень часто так же и результат кэширования при компиляции. Команда очистить кэш компиляции

make clean

Я бы рекомендовал ее выполнять каждый раз перед make.

Если вы добавили новые файлы к проекту, то нужно еще раз запускать CMAKE.

Был случай, когда проект копировали в другую папку на другой компьютер и запуск CMAKE не помогал, просто поменялись все пути, а система сборки этого не видела. Вот здесь и важно правило программирования, что папка с исходными файлами и файлы компиляции находятся в разных папка. Мы просто удаляем все что находится в папке сборки, в консоли это можно сделать командой

rm -r *

где команда rm — удалить, -r — удалять рекурсивно, т. е. папки и все что в них тоже, * - маска, в таком виде означает удалить все, так как подходит к любому файлу и папке. И заново собираем проект.