Revision as of 14:58, 21 Feb 2006 213.131.7.83 (Talk | contribs) ← Go to previous diff |
Revision as of 15:57, 21 Feb 2006 213.131.7.83 (Talk | contribs) Go to next diff → |
||
Line 45: | Line 45: | ||
компиляцией. | компиляцией. | ||
- | Исходники берутся [http://www.apache.org/dist/xml/xerces-c/xerces-c-current.tar.gz тут] | + | Исходники берутся |
+ | [http://www.apache.org/dist/xml/xerces-c/xerces-c-current.tar.gz тут] | ||
Почему-то разработчики проигнорировали существующие в линуксе традиции | Почему-то разработчики проигнорировали существующие в линуксе традиции | ||
обустройства окружения для сборки программ, и обычной | обустройства окружения для сборки программ, и обычной | ||
Line 56: | Line 57: | ||
пользоваться удобствами rpm. | пользоваться удобствами rpm. | ||
- | rpmbuild -bb xerces-c.spec | + | # rpmbuild -bb xerces-c.spec |
Эта команда собирает пакет xerces. Чтобы его установить сделайте так: | Эта команда собирает пакет xerces. Чтобы его установить сделайте так: | ||
- | rpm -i /usr/src/redhat/RPMS/`uname -m`/xerces-c*.rpm | + | # rpm -i /usr/src/redhat/RPMS/`uname -m`/xerces-c*.rpm |
Понятно, обе эти команды должны выполняться из-под рута. | Понятно, обе эти команды должны выполняться из-под рута. | ||
Line 66: | Line 67: | ||
===CppGDML=== | ===CppGDML=== | ||
- | Здесь все сложнее. | + | Здесь все сложнее. Скачав из Интернета |
+ | [http://service-spi.web.cern.ch/service-spi/app/releases/GDML/downloads/GDML_2_4_0.tar.gz | ||
+ | файл] с дистрибутивом системы, мы распаковываем его в какую-нибудь | ||
+ | директорию. | ||
+ | |||
+ | $ tar xzf GDML_2_4_0.tar.gz -C /geant4 | ||
+ | |||
+ | Затем вам понадобится наложить патч, который можно скачать | ||
+ | [http://patch здесь]. Для этого: | ||
+ | |||
+ | $ cd /geant4/CPPGDML | ||
+ | $ gunzip -c <путь-где-вы-скачали-патчик> | patch -p1 | ||
+ | |||
+ | Все оказалось проще, чем я предполагал. Процесс внесения изменений, | ||
+ | отраженных в этом патче, занял у меня пару дней, вам же достаточно | ||
+ | теперь воспользоваться 50-килобайтным патчиком. А дальше все | ||
+ | стандартно: | ||
+ | |||
+ | $ cd /geant4/CPPGDML | ||
+ | $ export XERCESCROOT=/usr | ||
+ | $ ./configure | ||
+ | $ make | ||
+ | $ su | ||
+ | # make install | ||
+ | |||
+ | <span style="color: red;">Предупреждение: накладывать на исходники | ||
+ | CppGDML какие-либо патчи надо лишь в том случае, если вы планируете | ||
+ | воспользоваться GCC4 для его сборки. С третьей версией все работает и | ||
+ | безо всяких изменений.</span> | ||
+ | |||
+ | ===Тюнинг=== | ||
+ | |||
+ | Скомпилировали, установили, но все еще ничего не работает — | ||
+ | мне понадобилось удалить все динамические библиотеки, которые создает | ||
+ | CppGDML при установке, чтобы удовлетворить линкер. | ||
+ | |||
+ | # rm /usr/local/lib/libG4Processor.so | ||
+ | /usr/local/lib/libG4Subscribers.so /usr/local/lib/libG4Writer.so | ||
+ | /usr/local/lib/libProcesses.so /usr/local/lib/libSaxana.so | ||
+ | /usr/local/lib/libWriter.so | ||
+ | |||
+ | (Это все одна длинная команда) По умолчанию библиотеки устанавливаются | ||
+ | в <tt>/usr/local</tt>, если вы модифицировали путь установки, то вам | ||
+ | придется удалять их из другого места. | ||
+ | |||
+ | ===Использование=== | ||
+ | |||
+ | Использование GDML в коде на GEANT4 лежит за пределами этого | ||
+ | руководства по установке, мы лишь поясним, как подключать библиотеки к | ||
+ | вашей программе. Все достаточно просто. Добавьте в начало мейкфайла | ||
+ | следующие строки: | ||
+ | |||
+ | XERCESCROOT=/usr | ||
+ | |||
+ | CPPFLAGS+=-I/geant4/CPPGDML/Common/Processes \ | ||
+ | -I/geant4/CPPGDML/Common/Saxana/ \ | ||
+ | -I/geant4/CPPGDML/Common/Schema/ \ | ||
+ | -I/geant4/CPPGDML/Common/Writer/ \ | ||
+ | -I/geant4/CPPGDML/G4Binding/G4Processor/ \ | ||
+ | -I/geant4/CPPGDML/G4Binding/G4Subscribers/ \ | ||
+ | -I/geant4/CPPGDML/G4Binding/G4Writer/ | ||
+ | |||
+ | EXTRALIBS=-L/usr/local/lib -Wl,--start-group -lG4Subscribers \ | ||
+ | -lG4Processor -lProcesses -lSaxana -lG4Writer \ | ||
+ | -lWriter -lxerces-c -lxerces-depdom -Wl,--end-group | ||
+ | |||
+ | Опять же, возможно вам будет необходимо вручную поправить используемые | ||
+ | в них пути к заголовочным файлам и бинарным библиотекам. |
Revision as of 15:57, 21 Feb 2006
Содержание |
Что такое GDML
GDML — это аббревиатура, образованная от слов Geometry Description Markup Language. То бишь, язык разметки описания геометрии. Домашняя страничка GDML (http://cern.ch/gdml). В принципе, это независимый от GEANT4 проект, но нам неизвестны случаи его использования отдельно от последнего. GDML позволяет описывать геометрию и материалы в файлах XML, что оказывается очень удобным, так как защищает от целого ряда ошибок, возникающих при попытке сделать то же самое в коде на Си++. Кроме того заманчива сама идея изменять геометрию вашей установки на Geant без перекомпиляции программы.
А какие перспективы открываются, если поразмыслить на предмет конвертации в GDML существующих форматов файлов из разнообразных 3D-моделлеров и CAD-ов…
К сожалению, установка GDML — мероприятие сопряженное с множеством трудностей. Связаны они, прежде всего, с тем, что код библиотеки GDML содержит некоторые синтаксические элементы, которые, строго говоря, не являются валидными, но GCC версий 3.x не обращал на них внимание. С выходом версии 4, однако, этой вольнице пришел конец, и лишние точки-с-запятой, щедро разбросанные там и сям в коде GDML, считаются им за ошибки. Собственно, удаление этих лишних знаков пунктуации и является самой длительной и неприятной операцией при установке его на современные системы, которые все уже давно перешли на GCC 4.
В данном документе будет описываться процесс установки GDML в Линуксе. На других системах поэкспериментировать мне не довелось, вполне возможно, что там все будет работать, что называется, «прямо-из-коробки» (дословный перевод замечательного выражения out-of-the-box, русского аналога которому я не могу припомнить).
Xerces
Для работы CppGDML — так называется библиотека, обеспечивающая работу GEANT4 с GDML — требуется внешний XML-парсер Xerces-C++. Это разработка Apache Foundation, известной также своим веб-сервером. Xerces существует для Си++ и для Java, нам нужнее первый. В линуксах, доступных мне, в списке стандартных пакетов есть только Xerces-java, так что собирать его Си++-версию мне пришлось самому. Есть вероятность, что в вашей системе будет возможность установить Xerces-C++ из стандартного менеджера пакетов, не возясь с компиляцией.
Исходники берутся тут (http://www.apache.org/dist/xml/xerces-c/xerces-c-current.tar.gz) Почему-то разработчики проигнорировали существующие в линуксе традиции обустройства окружения для сборки программ, и обычной последовательностью из трех команд здесь не обойтись. Пользователям систем на основе RPM можно посоветовать воспользоваться входящим в комплект поставки файлом xerces-c.spec, чтобы создать с его помощью готовый к установке rpm в полностью автоматическом режиме, остальным же остается посоветовать попробовать установить себе rpm и rpmbuild, благо я не встречал ныне линуксов, где так или иначе нельзя пользоваться удобствами rpm.
# rpmbuild -bb xerces-c.spec
Эта команда собирает пакет xerces. Чтобы его установить сделайте так:
# rpm -i /usr/src/redhat/RPMS/`uname -m`/xerces-c*.rpm
Понятно, обе эти команды должны выполняться из-под рута.
CppGDML
Здесь все сложнее. Скачав из Интернета [http://service-spi.web.cern.ch/service-spi/app/releases/GDML/downloads/GDML_2_4_0.tar.gz файл] с дистрибутивом системы, мы распаковываем его в какую-нибудь директорию.
$ tar xzf GDML_2_4_0.tar.gz -C /geant4
Затем вам понадобится наложить патч, который можно скачать здесь (http://patch). Для этого:
$ cd /geant4/CPPGDML $ gunzip -c <путь-где-вы-скачали-патчик> | patch -p1
Все оказалось проще, чем я предполагал. Процесс внесения изменений, отраженных в этом патче, занял у меня пару дней, вам же достаточно теперь воспользоваться 50-килобайтным патчиком. А дальше все стандартно:
$ cd /geant4/CPPGDML $ export XERCESCROOT=/usr $ ./configure $ make $ su # make install
Предупреждение: накладывать на исходники CppGDML какие-либо патчи надо лишь в том случае, если вы планируете воспользоваться GCC4 для его сборки. С третьей версией все работает и безо всяких изменений.
Тюнинг
Скомпилировали, установили, но все еще ничего не работает — мне понадобилось удалить все динамические библиотеки, которые создает CppGDML при установке, чтобы удовлетворить линкер.
# rm /usr/local/lib/libG4Processor.so /usr/local/lib/libG4Subscribers.so /usr/local/lib/libG4Writer.so /usr/local/lib/libProcesses.so /usr/local/lib/libSaxana.so /usr/local/lib/libWriter.so
(Это все одна длинная команда) По умолчанию библиотеки устанавливаются в /usr/local, если вы модифицировали путь установки, то вам придется удалять их из другого места.
Использование
Использование GDML в коде на GEANT4 лежит за пределами этого руководства по установке, мы лишь поясним, как подключать библиотеки к вашей программе. Все достаточно просто. Добавьте в начало мейкфайла следующие строки:
XERCESCROOT=/usr
CPPFLAGS+=-I/geant4/CPPGDML/Common/Processes \ -I/geant4/CPPGDML/Common/Saxana/ \ -I/geant4/CPPGDML/Common/Schema/ \ -I/geant4/CPPGDML/Common/Writer/ \ -I/geant4/CPPGDML/G4Binding/G4Processor/ \ -I/geant4/CPPGDML/G4Binding/G4Subscribers/ \ -I/geant4/CPPGDML/G4Binding/G4Writer/
EXTRALIBS=-L/usr/local/lib -Wl,--start-group -lG4Subscribers \ -lG4Processor -lProcesses -lSaxana -lG4Writer \ -lWriter -lxerces-c -lxerces-depdom -Wl,--end-group
Опять же, возможно вам будет необходимо вручную поправить используемые в них пути к заголовочным файлам и бинарным библиотекам.