【发布时间】:2011-08-07 03:33:29
【问题描述】:
我遵循了 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。
具体来说:
- 首先,我从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 控制台应用程序项目,并在 Project Properties\Linker\Command Line\ 下添加两个 Additional Options。他们是:
- 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 位会导致这个问题。任何的想法?谢谢。
【问题讨论】:
标签: c++ visual-studio installation compiler-errors