如何使用Visual Studio编写Windows版GMP

ktecyv1j  于 2022-11-17  发布在  Windows
关注(0)|答案(3)|浏览(367)

我正在尝试在windows上安装gmp。我已经找到了在windows上从源代码编译的mingw方式。但是无法找到gmp 6.1.2或visual studio项目的二进制文件以便从源代码编译。所以问题是:我在哪里可以下载gmp 6.1.2二进制文件或使用Visual Studio从源代码编译。

ttygqcqt

ttygqcqt1#

使用VisualStudio在Windows上编译GMP可能比较棘手,但是已经有一些SO问题可能会对您有所帮助(取决于您的具体用例):

简单的答案是,没有GMP的源代码可以直接使用VisualStudio进行编译,因为GMP是在UNIX环境下开发的。
选项摘要:
1.使用MinGW分发中提供的GMP版本
1.使用MinGW/Cygwin编制自己的GMP
1.使用MPIR派生的GMP可使用VisualStudio编译

ozxc1zmp

ozxc1zmp2#

我将介绍在Windows中编译GMP的三种方法。

第一个

安装Visual Studio 2022社区from this page
安装VCPKG包管理器为described here,基本上只做两步:
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
您可以直接将triple传递给所有vcpkg命令(如vcpkg install gmp --triplet=x64-windows-static),而不用执行上述步骤(设置变量)。
在vcpkg的git目录中运行以下命令:
vcpkg install gmp --triplet=x64-windows-static
(you如果您按照上面所述设置环境变量,可能会忽略--triplet=x64-windows-static
这将花费相当多的时间,它将编译许多包从源代码。
完全编译完成后,它将显示在控制台路径ZIP文件与编译GMP库。在我的系统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。
转到MSYS 2的home page.下载安装程序,链接位于“1.下载安装程序:“短语附近。安装到任何位置,例如c:\bin\msys\
安装后,在Windows开始菜单中转到应用程序“MSYS 2 64 bit”,并在其中启动程序“MSYS 2 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库中的两个符号,因为它与Visual Studio的libucrt.lib库冲突。
在下面的两个命令中,我假设您的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
(this将使用libmingwex.a库中的两个重命名符号创建文件libmingwex_renamed.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.alibgcc.alibmingwex_renamed.a。另外,请注意,libgcc.a是从子文件夹\11.3.0\中获取的,它是已安装GCC的当前版本,但随着时间的推移,MSYS 2会将GCC更新为更高版本,因此该版本子文件夹应相应更改。

三档

像第一步和第二步一样安装Visual Studio。
在这一步我们将使用MPIR,它是GMP的一个fork,真正好的fork更适合Windows。
克隆存储库:
x1米32英寸
在文件夹.\mpir\msvc\vs22\内运行:
x1米34英寸
以上命令构建了适用于任何CPU的通用版本。
x1米35英寸
它构建了一个非常优化的版本,比一般的更快。

非常重要。如果第二个(skylake)编译失败,那么可以使用通用(gc)版本,但它可能会慢5倍。如果快速Skylake版本失败,那么最好不要使用这个第三个编译GMP的方法,除非你不能做其他的,或者如果慢版本对你来说足够了。

上述命令应照常从“开始”菜单中Visual Studio的“x64本机命令提示符”shell运行。
在构建完成GMP(实际上是MPIR)之后,可以将程序编译为:
x1米36英寸
请注意,在上面的命令中,我为优化的AVX版本使用了\lib_mpir_skylake_avx\子文件夹,如果只有通用版本可用,请使用\lib_mpir_gc\子文件夹。

iqjalb3h

iqjalb3h3#

我在Windows 11中遇到了同样的问题,当我需要gmp和gmpxx时,只有第一个选项起作用,这要感谢@Arty。唯一要补充的是,vcpkg install gmp --triplet=x64-windows-static命令应该在具有管理员权限的终端中运行,否则将发生以下错误:
文件RENAME无法重命名

C:/Users/Desktop/polycut/vcpkg/packages/gmp_x64-windows-static

C:/Users/Desktop/polycut/vcpkg/packages/gmp_x64-windows-static_tmp

原因:访问被拒绝。

相关问题