如何使用Visual Studio 2010构建mpir-2.4.0?

时间:2011-08-07 03:33:30

标签: c++ visual-studio installation compiler-errors

我按照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.exeWin64 VS2010.zip,并将它们都放入我的VC\bin目录中。我还将yasm-1.1.0-win64.exe重命名为yasm.exe
  • 然后我在mpir.sln文件夹中打开build.vc10,并在lib模式下构建所有release项目,因为我只想使用静态库。

构建这些解决方案后,它会生成一个名为Win32的文件夹,在此文件夹中还有另一个名为Release的文件夹,其中还有四个其他库文件:

  • mpir.lib
  • mpirrxx.lib
  • mpir.pdb
  • mpirxx.pdb

enter image description here

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

  • 的Win32 enter image description here

  • 64
    enter image description here

接下来,我将所有库文件从build.vc10\lib复制到我的C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include以及mpir.hmpirxx.h复制到我的C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include
完成所有这些步骤后,我创建了一个Win32控制台应用程序项目,并在Additional Options下添加了两个Project Properties\Linker\Command Line\。他们是:

  • 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位可能导致这个问题。任何的想法?谢谢。

2 个答案:

答案 0 :(得分:1)

虽然您已构建了MPIR的发行版,但您正在自己项目的调试版中使用它。构建MPIR的调试版本或切换到项目的发布版本。

答案 1 :(得分:1)

我猜你是在构建x64库吗?我做了,然后遇到了类似的问题,你遇到了什么。确保正确配置MSVC项目以用于x64库...此链接应该有所帮助:How to compile a 64-bit application using Visual C++ 2010 Express?