我遵循了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


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

  • 接下来,我将所有库文件从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 Console Application项目,并在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位混合会导致此问题。任何想法?谢谢。

    最佳答案

    尽管已经构建了MPIR的发行版,但是您正在自己项目的调试版本中使用它。生成MPIR的调试版本或切换到项目的发行版本。

    08-16 03:24