Как установить GMP Mp на windows?(C ++) - PullRequest
0 голосов
/ 07 октября 2018

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

Я пытался установить Cygwin (и MYSY) и запустить командычто мне сказали гиды, но терминал либо ничего не делает, либо выдает ошибку: «нет такого файла или каталога».(Я изменил каталог папки, где мои файлы, где)

Также я не совсем уверен, что все установил правильно, потому что я должен был проверить некоторые надстройки во время установки правильно?Я сделал как в руководстве, но все же я, возможно, что-то пропустил ...

Может кто-нибудь объяснить мне, как шаг за шагом, как установить его, говоря явно все, что должно быть сделано, (я запускаю Windows 7) учитывая, что я делаю это впервые, я понятия не имею, что означают ./configure, make и все остальные команды ...

1 Ответ

0 голосов
/ 08 октября 2018

Ниже приведен простой шаг за шагом с использованием только инструментов Cygwin.

Для компиляции C ++ нам нужен компилятор g ++;Чтобы найти правильный пакет для установки, инструмент cygwin имеет значение cygcheck (которое установлено по умолчанию), с переключателем -p он запрашивает базу данных по адресу https://cygwin.com/packages/:

$ cygcheck -p bin/g++
Found 3 matches for bin/g++
gcc-g++-7.3.0-1 - gcc-g++: GNU Compiler Collection (C++)
gcc-g++-7.3.0-2 - gcc-g++: GNU Compiler Collection (C++)
gcc-g++-7.3.0-3 - gcc-g++: GNU Compiler Collection (C++)

, поэтому нам нуженgcc-g++ пакет.
Чтобы установить его, мы запускаем установку cygwin, выбираем представление Full, ищем gcc-g, чтобы отфильтровать тысячи пакетов, и нажимаем skip в строке gcc-g++ * 1015.*

enter image description here

после завершения установки, чтобы убедиться, что он установлен правильно:

$ cygcheck -c gcc-g++
Cygwin Package Information
Package              Version        Status
gcc-g++              7.3.0-3        OK

Установка gcc-g ++ также приведет к установкеиз пакета компилятора C gcc-core.
Для компиляции программы gmp нам нужен соответствующий заголовок и разделяемая библиотека;которые обычно включаются в пакет "* -devel":

$ cygcheck -p include/gmpxx.h
Found 9 matches for include/gmpxx.h
libgmp-devel-6.1.0-3p1 - libgmp-devel: Library for arbitrary precision arithmetic (development) (installed binaries and support files)
libgmp-devel-6.1.1-1 - libgmp-devel: Library for arbitrary precision arithmetic (development) (installed binaries and support files)
libgmp-devel-6.1.2-1 - libgmp-devel: Library for arbitrary precision arithmetic (development)
mingw64-i686-gmp-6.0.0a-2 - mingw64-i686-gmp: Multiple Precision arithmetic library for Win32 toolchain (installed binaries and support files)
...

Все пакеты с mingw64 предназначены для кросс-компиляции, и мы можем игнорировать, поэтому это libgmp-devel.Проверка правильности установки

$ cygcheck -c libgmp-devel
Cygwin Package Information
Package              Version        Status
libgmp-devel         6.1.2-1        OK

И содержимое пакета - это заголовочные файлы и библиотеки импорта

$ cygcheck -l libgmp-devel
/usr/include/gmp.h
/usr/include/gmpxx.h
/usr/lib/libgmp.dll.a
/usr/lib/libgmpxx.dll.a

Теперь мы можем запрограммировать один пример, я беру его из https://gmplib.org/manual/C_002b_002b-Interface-General.html и записан в файле с именем mpz_add.cpp. Вы можете использовать любой редактор, какой захотите.Важно то, что файл соответствует стандарту LF для завершения строки Unix, а не Windows CR + LF (см. Примечание ниже, если нет)

$ file mpz_add.cpp
mpz_add.cpp: C++ source, ASCII text

$ cat mpz_add.cpp
#include <gmpxx.h>
#include <iostream>
using namespace std;

int main (void)
{
  mpz_class a, b, c;

  a = 1234;
  b = "-5678";
  c = a+b;
  cout << "sum is " << c << "\n";
  cout << "absolute value is " << abs(c) << "\n";

  return 0;
}

Чтобы скомпилировать наш пример и проверить его:

$ g++ mpz_add.cpp -lgmpxx -lgmp -o  mpz_add
$ ./mpz_add
sum is -4444
absolute value is 4444

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

$ cygcheck ./mpz_add
D:\cyg_pub\tmp\gmp\mpz_add.exe
  D:\cygwin64\bin\cygwin1.dll              <= cygwin library
    C:\WINDOWS\system32\KERNEL32.dll       <= windows system library
      C:\WINDOWS\system32\ntdll.dll         ...
      C:\WINDOWS\system32\KERNELBASE.dll    ...
  D:\cygwin64\bin\cyggmp-10.dll            <= GMP C library
  D:\cygwin64\bin\cyggmpxx-4.dll           <= GMP C++ library  
    D:\cygwin64\bin\cyggcc_s-seh-1.dll     <= C library
    D:\cygwin64\bin\cygstdc++-6.dll        <= C++ library

Если файл имеет неправильное завершение строки, лучший инструмент - d2u (DOS в Unix)

$ cygcheck -p bin/d2u
Found 6 matches for bin/d2u
...
dos2unix-7.4.0-1 - dos2unix: Line Break Conversion

$ file mpz_add.cpp
mpz_add.cpp: C++ source, ASCII text, with CRLF line terminators
$ d2u mpz_add.cpp
dos2unix: converting file mpz_add.cpp to Unix format...
$ file mpz_add.cpp
mpz_add.cpp: C++ source, ASCII text

Поскольку вы добавили также тег makefile и autotools, первый находится в пакете make:

$ cygcheck -p bin/make.exe
Found 6 matches for bin/make.exe
..
make-4.2.1-2 - make: The GNU version of the 'make' utility 

Второй более сложный ивам нужны пакеты autoconf automake и libtool,

...