use*_*079 5 c++ windows gmp visual-studio
我正在尝试在 Windows 上安装 gmp。我找到了在Windows上从源代码编译的mingw方式。但无法找到 gmp 6.1.2 或 Visual Studio 项目的二进制文件以便从源代码进行编译。所以问题是:在哪里可以下载 gmp 6.1.2 二进制文件或使用 Visual Studio 从源代码进行编译。
我将描述在 Windows 中编译 GMP 的三种方法。
第一的
从此页面安装 Visual Studio 2022 Community 。
按照此处所述安装 VCPKG 包管理器,基本上只需执行两个步骤:
git clone https://github.com/Microsoft/vcpkg --depth=1
vcpkg目录内运行
cmd /c bootstrap-vcpkg.bat
设置系统环境变量VCPKG_DEFAULT_TRIPLET=x64-windows-static,为此请按WinKey+Pause,然后单击“高级系统设置”,然后单击“环境变量”,在“系统变量”内单击“新建”并将值设置VCPKG_DEFAULT_TRIPLET为x64-windows-static。
您可以直接将三元组传递给所有 vcpkg 命令,例如vcpkg install gmp --triplet=x64-windows-static.
在 vcpkg 的 git 目录中运行以下命令:
vcpkg install gmp --triplet=x64-windows-static
--triplet=x64-windows-static(如果您按照我上面的说明设置环境变量,则可以省略)
这将花费相当多的时间,它将从源代码编译许多包。
完整编译完成后,它将在控制台中显示带有已编译 GMP 库的 ZIP 文件的路径。在我的系统上,ZIP 文件是在 处创建的C:\Users\user\AppData\Local\vcpkg\archives\8d\8d1c08fabf677187083dedd12d6accf7114d91580e75611c065f1674b600bee9.zip。
解压此 ZIP 文件,然后您可以编译 C++ 程序,如下所示:
cl program.cpp /O2 /GL /EHsc /std:c++latest /Ipath_to_unpacked_zip/include/ path_to_unpacked_zip/lib/gmp.lib
您可能知道cl命令应该从“x64 本机命令提示符”命令 shell 运行,该命令 shell 可以在“Windows 开始菜单/Visual Studio 2022 /”中找到。
您也可以安装MPIR而不是 GMP,这是 GMP 的一个分支,具有相同的界面,但 Windows 用户更喜欢。这样做就vcpkg install mpir可以了,但是只有先删除 GMP 包才可以,只能安装 MPIR 或 GMP 之一。
第二
此步骤不编译 GMP,而是使用 MinGW 安装中预编译的二进制文件。
按照第一步安装 Visual Studio。
转到MSYS2 的主页。下载安装程序,链接位于“1.下载安装程序:”短语附近。将其安装到任何位置,例如c:\bin\msys\。
在 Windows 开始菜单中安装后,转到应用程序“MSYS2 64bit”并在其中启动程序“MSYS2 MSYS”,它将运行类 Unix 的 shell,从中执行以下操作:
pacman -S msys/binutils msys/gcc msys/mingw-w64-cross-crt-git clang64/mingw-w64-clang-x86_64-gmp
上面的命令将安装使用 GMP 所需的所有软件包。如果您需要更多软件包,请使用-Ss类似 的选项pacman -Ss clang,这将搜索 CLang,-Ss搜索和-S安装也是如此。
如果您稍后需要一些时间,pacmans -Syu命令会更新所有已安装的软件包,请运行此命令两次,一次更新基本系统文件,第二次更新所有其他软件包(第一次后您需要再次关闭并打开 MSYS shell)。
现在您需要进行一项调整,重命名库中的两个符号,libmingwex.a因为与libucrt.libVisual Studio 库发生冲突。
在下面的两个命令中,我假设您的MSYS安装文件夹是c:\dev\msys\,您可以更改为您安装的文件夹。
c:\bin\msys\usr\bin\objcopy.exe --redefine-sym wcsnlen=wcsnlen_renamed --redefine-sym strnlen=strnlen_renamed c:\bin\msys\opt\x86_64-w64-mingw32\lib\libmingwex.a c:\bin\msys\opt\x86_64-w64-mingw32\lib\libmingwex_renamed.a
(这将创建带有库libmingwex_renamed.a中重命名的两个符号的文件libmingwex.a)
现在一切都准备好了,你可以像下面这样编译你的 C++ 程序:
cl program.cpp /O2 /GL /EHsc /std:c++latest /Ic:\bin\msys\clang64\include\ c:\bin\msys\clang64\lib\libgmp.a c:\bin\msys\usr\lib\gcc\x86_64-pc-msys\11.3.0\libgcc.a c:\bin\msys\opt\x86_64-w64-mingw32\lib\libmingwex_renamed.a
请参阅上面的命令,我使用了 3 个库libgmp.a和libgcc.a。libmingwex_renamed.a另请注意,libgcc.a取自子文件夹\11.3.0\,它是已安装的 GCC 的当前版本,但随着时间的推移,MSYS2 将 GCC 更新到更高版本,因此应相应更改此版本子文件夹。
第三
像第一步和第二步一样安装 Visual Studio。
在这一步中我们将使用MPIR,它是 GMP 的一个分支,非常好的分支,更适合 Windows。
克隆存储库:
git clone https://github.com/BrianGladman/mpir --depth=1
在文件夹内.\mpir\msvc\vs22\运行:
cmd /c msbuild.bat gc LIB x64 Release
上面的命令构建了适用于任何 CPU 的通用版本。之后做
cmd /c msbuild.bat skylake_avx LIB x64 Release
它构建了非常优化的版本,比通用版本更快。
很重要。如果第二个 (skylake) 构建失败,则可以使用通用 (gc) 版本,但速度甚至可能慢 5 倍。如果快速的 Skylake 版本失败了,那么最好不要使用第三种编译GMP 的方法,除非你不能做其他的,或者慢速版本对你来说已经足够了。
上面的命令应像往常一样从“开始”菜单中 Visual Studio 的“x64 Native Command Prompt”shell 运行。
构建完成 GMP(实际上是 MPIR)后,您可以将程序编译为:
cl program.cpp /O2 /GL /EHsc /std:c++latest /Ipath_to_mpir_repo\msvc\vs22\lib_mpir_skylake_avx\x64\Release\ path_to_mpir_repo\msvc\vs22\lib_mpir_skylake_avx\x64\Release\mpir.lib
请注意,在上面的命令中,我使用了\lib_mpir_skylake_avx\优化 AVX 版本的子文件夹,\lib_mpir_gc\如果只有通用版本可用,请使用子文件夹。