12 мая 2010 г.

Компиляция библиотеки GMP под Windows при помощи MinGW

Библиотека GMP, или GNU Multi-Precision Library используется во многих программах, так или иначе связанных с точными вычислениями. Библиотека GMP содержит множество алгоритмов и функций, благодаря которым вы можете выполнять в своих программах основные математические операции с заданной точностью. К примеру, расчитать число π до десятитысячного знака. Так как код GMP написан на Си и ассемблере, компиляцию библиотеки приходится осуществлять вручную под конкретную платформу и используемый вами процессор.

Если вы работаете в Линуксе или на Юниксе, то проблем с компиляцией библиотеки GMP у вас практически не возникает. Инструменты компиляции и сборки GMP изначально ориентируются на Unix-подобные системы. Однако если вы работаете в Windows, то можете столкнуться с некоторыми сложностями. Ниже я привожу вариант компиляции данной библиотеки при помощи инструментов MinGW и MSYS. Справедливости ради стоит отметить, что сборку библиотеки GMP можно так же осуществить при помощи среды Cygwin, однако я предпочитаю использовать MSYS, которая после настройки позволяет легко компилировать в Windows многие библиотеки и проекты, созданные под Unix-подобные системы. Итак:

I. Настройка Windows для компиляции GMP

1. Cначала необходимо установить MinGW. Устанавливать MinGW лучше всего в папку C:\MinGW, так как в последствии у вас будет меньше проблем с настройкой других инструментов.

2. После установки MinGW, необходимо установить набор утилит MSYS. Устанавливать MSYS лучше всего в его папку "по умолчанию", то есть в C:\msys\1.0. При установке MSYS будет производиться дополнительная конфигурация, во время которой вас попросят указать местоположение MinGW (папка C:\MinGW в нашем случае).

3. Помимо MSYS-а вам так же понадобятся его дополнительные модули: MSYS DTK 1.0, MSYS flex, MSYS regex и MSYS bison. Все указанные библиотеки и модули вы распаковываете и просто копируете в папку C:\msys\1.0, где образуется ваша Unix-подобная среда. Хотя установка MSYS-а выглядит сложной, на самом деле никаких сложностей с установкой нет, а в итоге вы получаете очень удобную среду для компиляции библиотек и программ из Unix-подобных систем на машине с Windows.

4. После успешной установки MSYS-а, внутри папки C:\msys\1.0\home у вас должна появиться соответствующая домашняя директория пользователя. Вы можете переименовать эту домашнюю пользовательскую директорию в любое другое, удобное для вас имя. Я для удобства переименовал ее в username. Если вы не хотите ничего переименовывать, то в нижеприведенных командах используйте вместо username имя вашей домашней директории.

5. Теперь нужно скачать библиотеку GMP, и распаковать её в вашу домашнюю пользовательскую директорию, то есть в папку C:\msys\1.0\home\username.

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

II. Компиляция библиотеки GMP под Си

1. Откройте папку C:\msys\1.0, и запустите MSYS при помощи файла msys.bat. После запуска убедитесь, что вы находитесь внутри своей домашней директории username.

2. Введите команду mkdir gmp. В эту папку будут помещаться скомпилированные модули библиотеки GMP, а так же её заголовочный файл.

3. Перейдите в папку с библиотекой GMP при помощи команды cd gmp-x.x.x

4. Введите команду ./configure --prefix=/home/username/gmp

5. После окончания конфигурации, введите команду make

6. Теперь, когда библиотека GMP скомпилирована, можно запустить её тестирование при помощи команды make check

7. Очистите компиляцию от ненужных файлов при помощи команды make clean

8. Теперь, когда конфигураци, компиляция, тестирование и очистка библиотеки GMP успешно завершены, скопируйте модули libgmp.a и libgmp.la из папки C:\msys\1.0\home\username\gmp\lib в папку C:\MinGW\lib, а заголовочный файл gmp.h из папки C:\msys\1.0\home\username\gmp\include - в папку C:\MinGW\include. Так же можно скопировать содержимое папки C:\msys\1.0\home\username\gmp\share\info в папку C:\MinGW\share\info.

Теперь ваша среда MinGW получила полноценную библиотеку GMP. Следует отметить, что получившиеся модули и заголовочный файл предназначены для использования в Си-программах. Конечно, никто не запрещает использование Си-библиотек внутри программ, написанных на Си++, однакое если вы хотите явно получить библиотеку для Си++, то на шаге №4 вам следует ввести команду ./configure --prefix=/home/username/gmp --enable-cxx, а все остальное - выполнить точно так же, как и в случае с библиотекой для Си. Единственное, что будет другим - это имена скомпилированных модулей и полученного заголовочного файла. В случае с библиотекой для Си++, они будут соответственно libgmpxx.a, libgmpxx.la и gmpxx.h.