如何在Windows上安装GMP Mp? (C ++)

时间:2018-10-07 08:53:03

标签: c++ makefile cygwin autotools gmp

我遵循了我可能找到的所有指南,但说实话,我什至不知道某些安装“步骤”是什么意思。

我尝试安装Cygwin(和MYSY)并运行指南中告诉我的命令,但终端不执行任何操作或给我错误:“无此文件或目录”。 (我将文件夹目录更改为我的文件所在的位置)

我也不完全确定我是否正确安装了所有内容,因为我应该在安装过程中检查一些附加组件,对吗?我按照指南中的指示进行操作,但仍然可能错过了一些东西...

有人可以分步向我解释如何安装它,并明确说明必须完成的所有操作,(我正在运行Windows 7)考虑到这是我第一次这样做,我也不知道{{ 1}},./configure和所有其他命令甚至意味着...

1 个答案:

答案 0 :(得分:1)

以下是仅使用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++

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的文件中 您可以使用所需的任何编辑器。重要的是文件遵循 Unix行终止标准LF,而不是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(对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

在您还添加了标签makefileautotools时,第一个标签位于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 automakelibtool