我按照Rick Regan的指示进行操作:http://www.exploringbinary.com/how-to-install-and-run-gmp-on-windows-using-mpir/。不幸的是,由于某些原因,静态库只能用于C语言。对于C ++,编译器总是抱怨链接问题。我使用的当前版本(2.4.0)与Rick Regan的版本之间存在几个差异。另一方面,我还遵循了
具体来说:
完成以上步骤后,我创建了一个Win32控制台应用程序项目,并在
build.vc10
文件夹中的readme.txt,但我仍然无法弄清楚它为什么会出错。我正在运行Windows 7 x64,并使用Visual Studio 2010-Ultimate。具体来说:
- 首先,我从http://www.mpir.org/下载了MPIR版本2.4.0的源代码,即
Source tarball bz2
。 - 接下来,我从http://yasm.tortall.net/Download.html下载了
yasm
。我下载了Win64.exe
和Win64 VS2010.zip
,并将它们都放在我的VC\bin
目录中。我还将yasm-1.1.0-win64.exe
重命名为yasm.exe
- 然后,我打开
build.vc10
文件夹中的mpir.sln
,并在release
模式下构建了所有lib
项目,因为我只想使用静态库。
Win32
的文件夹,在此文件夹中有另一个名为Release
的文件夹,其中有四个其他库文件:
- mpir.lib
- mpirrxx.lib
- mpir.pdb
- mpirxx.pdb
build.vc10
文件夹中的lib
文件夹还生成了另外两个文件夹:
Win32
x64
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控制台应用程序项目,并在
项目属性\链接器\命令行\
下添加了两个附加选项
。它们是:
- mpir.lib
- mpirxx.lib
然后,我用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
文件夹复制其他替代方案,但仍然出现了相同的错误。但我不确定这些文件有何不同。我正在运行Windows 7 x64,但我不认为我的Visual Studio是x64的。我想知道混合32位和64位是否会导致此问题。有什么想法吗?谢谢。