我听从了里克·里根( Regan http://www.exploringbinary.com/how-to-install-and-run-gmp-on-windows-using-mpir/ )的指示。不幸的是,出于某些原因,静态库只适用于C。对于C++,编译器总是抱怨链接器问题。我使用的当前版本(2.4.0)与Regan版本有几个不同之处。另一方面,我也跟踪readme.txt在build.vc10文件夹,但我仍然不知道为什么它是坏的。我正在运行Windows7 x64,并使用VisualStudio2010-Ultimal。更具体而言:
首先,我从Source tarball bz2.
yasm。我同时下载了Win64.exe和Win64 VS2010.zip,并将它们放到了我的VC\bin目录中。我还将yasm-1.1.0-win64.exe重命名为yasm.exe
build.vc10文件夹中打开mpir.sln,并在release模式下构建所有lib项目,因为我只想使用静态库。构建这些解决方案后,它生成一个名为Win32的文件夹,在该文件夹中还有另一个名为Release的文件夹,其中有四个其他库文件:

此外,lib文件夹在build.vc10中还会生成另外两个文件夹:


接下来,我将所有库文件从build.vc10\lib复制到C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include,将mpir.h和mpirxx.h复制到C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include。
完成所有这些步骤后,我将创建一个Win32控制台应用程序项目,并在Project Properties\Linker\Command Line\下添加两个Additional Options。它们是:
然后,我用C构建了一些示例,它如预期的那样工作。然而,当我尝试这个特定的例子时:
#include <iostream>
using namespace std;
#pragma warning(disable: 4800)
#include <mpirxx.h>
#pragma warning(default: 4800)
int main (int argc, char *argv[])
{
mpz_class aBigPO2;
aBigPO2 = 1073741824; //2^30
aBigPO2*=aBigPO2; //2^60
aBigPO2*=aBigPO2; //2^120
aBigPO2*=aBigPO2; //2^240
aBigPO2*=aBigPO2; //2^480
aBigPO2*=aBigPO2; //2^960
aBigPO2*=aBigPO2; //2^1920
cout << aBigPO2 << endl;
}它失败了,有许多错误:
1>main.obj : error LNK2001: unresolved external symbol ___gmpz_set_si
1>main.obj : error LNK2001: unresolved external symbol ___gmpz_init
1>main.obj : error LNK2001: unresolved external symbol ___gmpz_mul
1>main.obj : error LNK2001: unresolved external symbol ___gmpz_clear我不知道为什么会这样。我甚至试图从Win32文件夹中复制其他替代方案,但仍然产生了相同的错误。但我不知道这些文件有什么不同。我正在运行Windows7 x64,但我不认为我的Visual是x64。我不知道32位和64位混合会导致这个问题。有什么想法吗?谢谢。
发布于 2011-08-07 06:52:13
尽管您已经构建了MPIR的发行版本,但您正在自己的项目的调试版本中使用它。生成MPIR的调试版本或切换到项目的发布版本。
发布于 2012-12-03 03:40:05
我猜你建了x64库吧?我做了,然后遇到了类似的问题,你被困在。确保您的MSVC项目配置正确,以便与x64库一起使用。此链接应有所帮助:How to compile a 64-bit application using Visual C++ 2010 Express?
https://stackoverflow.com/questions/6970558
复制相似问题