是否可以在Windows上为MSVC构建GMP?
我需要完全静态的解决方案(静态库),没有任何DLL的依赖关系。所以我的最终EXE不依赖于任何外部(非系统)DLL。
如果构建GMP需要Cygwin或MSYS,我没问题,只要它可以在MSVC中使用,没有任何问题。但据我所知,至少Cygwin构建总是依赖于额外的DLL,如cygwin1.dll
,这对我来说是负担不起的,需要完全静态库解决方案。
我知道有存在MPIR库,是更Windows友好。但现在我需要特别GMP解决方案,如果可能的话。
当然,如果在为Windows构建时使用所有优化和汇编,那就太好了。但是如果汇编是不可能的,那么至少需要GMP的非汇编(通用)变体。
当然我需要64位版本。
如果有人可以张贴所有的步骤需要产生这样的静态库MSVC使用?或者也许链接一些网站,有这样的指示?
2条答案
按热度按时间iyzzxitl1#
我成功地设法编译了一个工作完全静态链接的程序与GMP使用MSVC在Windows下。
为此,我使用了MSYS的安装,它位于我机器上的
c:/bin/msys/
中。然后在MSYS shell中安装GMP包
mingw-w64-clang-x86_64-gmp
和gmp-devel
(pacman -S gmp-devel
用于安装,pacman -Ss gmp
用于搜索)。在MSVC编译器中,我添加了包含目录
c:/bin/msys/clang64/include/
。用C编写了一个GMP使用程序的例子,该程序使用长算术实现Trial Division/Pollard's Rho/Pollard's P-1分解算法。该程序使用了
mpz_...()
C例程和mpz_class
C Package 类。例如,该程序位于main.cpp
中。在链接器命令行中,我添加了以下库:
另外,我不得不添加
/FORCE
标志(阅读here)到链接器命令,因为libmingwex.a
有一些符号与默认MSVC的库重叠,确切地说,没有/FORCE
我有以下错误:所有步骤产生的工作(测试)最终静态链接的程序没有任何外部DLL的依赖关系(当然,除了Windows的默认系统DLL)。
这意味着MSYS的库
.a
与MSVC完全兼容,并在MSVC编译中成功链接。没有
/FORCE
链接器标志我还做了额外的以下步骤.做了c:/bin/msys/clang64/x86_64-w64-mingw32/lib/libmingwex.a
库的副本.使用c:/bin/msys/clang64/bin/objcopy.exe
util,这可能是与Clang一起安装.与objcopy
重命名重叠符号:这使我能够成功地使用这个修改后的
libmingwex.a
库在MSVC中链接,而不需要使用/FORCE
。xpcnnkqh2#
很抱歉我的回答很简短,因为我没有时间。
我从here下载了MPIR源代码
关于如何建立库的解释是由伟大的Thomas Kim一个韩国导师在计算机语言的各个领域是here .我一直在努力建设GMP x64位的Windows和MPIR库来救我.我用Microsoft Visual Studio(VC++)建立.
我使用GMP库编写的代码几乎是用MPIR构建的,除了添加库之外没有任何更改。