Установка и использование GMP в C++
Библиотека GMP является наиболее известной бесплатной библиотекой для длинной арифметики, написанной на языке C с использованием ассемблера. Эта библиотека разрабатывается с 1991 года. Из этой библиотеки появился другой бесплатный независимый проект с длинной арифметикой, в котором была сохранена совместимость с GMP - MIPR. Mathematica, Maple и некоторые другие системы символьных вычислений используют GMP в качестве библиотеки для работы с длинной арифметикой.
Под линуксом проблем с установкой подобных библиотек обычно не возникает. Здесь срабатывает либо путь установки библиотеки из репозитария, либо более стандартный - скачивание исходных кодов и их компиляция при помощи “./configure && make && make install”.
Установка GMP для MINGW (Windows)
Если вы используете standalone версию MinGW(т.е. у вас есть папка C:\MinGW), то скорей всего вы её ставили при помощи утилиты mingw-get, которая находится в “C:\MinGW\bin”. При помощи mingw-get проблем с установкой GMP вообще не должно возникать, и ставится библиотека следующим образом :
В случае отсутствия mingw-get, или если хочется версию GMP посвежее, то можно попробовать собрать библиотеку из исходных кодов используя систему msys :
Флаг –enable-cxx позволит скомпилировать дополнительную библиотеку libgmpxx.a для С++ (заголовочный файл gmpxx.h) После компиляции в папке C:\code\gmp502c\ появится три директории lib(библиотеки для линковки), include(заголовочные файлы), share(доки для man). *Под MinGW мне удалось скомпилировать GMP из исходников, однако не получилось слинковать библиотеку с моим проектом. Я пробовал компилировать MIPR, но для нее не работает флаг –prefix при сборке и приходится собирать все что скомпилировалось в папке MIPR буквально “руками”. В конечном итоге я остановился на более простом варианте и решил использовать библиотеки, поставленные mingw-get.
C++ библиотеки GMP, их линковка и использование
GMP состоит из следующих файлов
При работе с GMP надо будет обязательно линковать файлы библиотек выше и указывать их в настройках проекта, иначе не избежать ошибок компиляции. Дополнительно, если вы используете версию из исходников, надо будет указать папку для поиска библиотек и заголовочных файлов(в примере это C:\code\gmp502\lib C:\code\gmp502\include) Дальше можно проверить, что скомпилированная GMP работает для следующиего исходника :
Если вы используете версию GMP из mingw-get :
И если версию из исходных кодов :
На Mac OS X при использование gmp из brew :
Документация по GMP есть на сайте, конкретно по C++ обертке здесь.
Напоследок хотелось бы сказать, что пока я не сразу нашел простой путь установки GMP для MinGW при помощи mingw-get, я был немного удивлен тем, что не существует нормальных версий библиотеки GMP(или MIPR), которая сразу бы скомпилировалась и заработала.
Ну и касаемо такого вопроса почему же все-таки GMP, а не Python или другой язык, в котором уже встроена длинная арифметика, я думаю вы уже догадались, GMP для C++ на порядок быстрее Python и схожих систем.