我遵循了Rick Regan http://www.exploringbinary.com/how-to-install-and-run-gmp-on-windows-using-mpir/的指示。不幸的是,由于某些原因,静态库仅适用于C。对于C++,编译器始终会抱怨链接器问题。我使用的当前版本(2.4.0)与Rick Regan的版本之间存在一些差异。另一方面,我还遵循了build.vc10
文件夹中的readme.txt,但我仍然不知道为什么它被破坏了。我正在运行Windows 7 x64,并使用Visual Studio 2010-Ultimate。
更加具体:
Source tarball bz2
。 yasm
。我同时下载了Win64.exe
和Win64 VS2010.zip
,并将它们都放入了VC\bin
目录中。我也将yasm-1.1.0-win64.exe
重命名为yasm.exe
mpir.sln
文件夹中的build.vc10
,并在lib
模式下构建所有release
项目,因为我只想使用静态库。 构建完这些解决方案之后,它将生成一个名为
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 Console Application项目,并在
Additional Options
下添加两个Project Properties\Linker\Command Line\
。他们是:然后,我用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位混合会导致此问题。任何想法?谢谢。 最佳答案
尽管已经构建了MPIR的发行版,但是您正在自己项目的调试版本中使用它。生成MPIR的调试版本或切换到项目的发行版本。