在过去的三天里,我一直试图在Windows 7上的VS2017中构建库,这是我能够想到的:

如果您在使MPIR与Windows 7 64bit上的Visual Studio 2017一起使用时遇到问题。您可以按照以下步骤。如果您使用的是Windows 8或10,则可能与Windows目录稍有不同,但概念仍应相同。您仍然可以以此为指导,仅进行目录设置所需的少量修改。

注意:-这直接针对x64

最佳答案

注意:我用x64release完成了所有操作。我没有做debug也不x86.
第1部分:-第一部分涉及获取设置所有内容所需的所有工具:

  • 确保已在Visual Studio中安装了最新版本的Python。编写脚本并对其进行测试,以确保Python正常运行。拥有适用于Python的IDLE也非常方便。这将使您不必将其加载到VS中即可执行运行脚本的简单重复任务。对于开发,这可能是我坚持使用Visual Studio的IDE的地方。
  • 如果您在Windows上,则需要vyasm:您可以从此处获取最新发行版:http://yasm.tortall.net/Download.html。您可以下载适用于Visual Studio 2010的Win32和Win64 zip,但只有x64是必需的,除非您使用的是x86专用计算机。然后,您可以将它们保存到桌面上的工作目录中。仅靠这些并不能做到。您需要Yasm的另一个工具才能在Windows上正确使用Visual Studio 2017。您还必须配置一些东西。您还将需要此克隆,您可以将其作为zip下载,以帮助使Yasm正确地与Visual Studio一起使用。可以在这里找到:https://github.com/ShiftMediaProject/VSYASM。将此保存到相同的工作目录中,但到目前为止尚未执行任何操作。在拥有所需的其余工具之后,我们将回到此。
  • 从此处获取最新的未修改的MPIR发行版3.0.0及其文档:http://mpir.org/downloads.html。我使用了MPIR源zip,在逐步设置MPIR的步骤中,其PDF非常有用。将它们保存到与上述相同的文件夹中。
  • 这与MPIR并不完全相关,但是它们并驾齐驱,我们可以继续从这里获取MPFR的最新未修改发行版4.01:http://www.mpfr.org/mpfr-current/#doc],但我还没有做。为此,您还将需要C++的依赖包装器库。您将需要MPFRC++最新未修改的发行版3.6.2,网址为:http://www.holoborodko.com/pavel/mpfr/#download。再次将它们保存到同一目录。现在,如果您愿意,还可以获取另一个类似于MPIR和MPFR的相似库,用于进行复数运算,但这不在此设置的范围之内。

  • 现在我们有了所需的一切:并且Python已经安装并且可以使用,我们可以开始设置和配置Yasm。

    第2部分-下一步是将vyasm(yasm)与Visual Studio正确集成

    如果您下载的是x86-32位版本,则我们将首先执行它;如果您尚未安装yasm,则所有步骤均相同。 (必须是vyasm)版本旨在集成到Visual Studio中,而不是通用版本。
  • 在工作目录中,您要将vsyasm-1.3.0-win32.zip提取到名为yasm的文件夹中。完成后,您需要将其放入C:\Program Files (x86)\中。将它们放在该目录中后,可以在工作目录中删除从中提取它们的temp文件夹,但保留zip以便将来使用。
  • 在同一工作目录中,您想将vsysam-1.3.0.win64.zip提取到名为yasm的文件夹中。相同的东西会进入win 64导演:C:\Program Files\。完成此操作后,您将要删除工作目录中的temp文件夹。
  • 您将要进入系统设置,并将添加2个环境变量。如果您不知道该怎么做,我将指导您:Click StartRight Click ComputerSelect Properties。在左侧Click Advanced System Properties。 (如果您使用的是Windows 8或10,则可能会有所不同)。设置System Properties Dialog Box后,您将需要选择Advanced Tab。在此选项卡上,指向底部Click Environment Variables。在System Variables下的下半部分,您将要单击New,您将要输入YASMPATH32的第一个字段(变量名:)。对于第二个字段(变量值:),您将需要键入C:\Program Files (x86)\yasm。然后选择确定以设置变量。您将针对64位版本重复此操作。 Click Add和(变量名:) YASMPATH64和(变量值:) C:\Programming Files\yasm,然后单击确定。如果您密切注意,我没有使用结尾的\/,而是故意这样做的。您稍后将看到为什么我们将Yasm设置为在Visual Studio中工作的原因。 Click Okay关闭Environment Variables,再次Click Okay关闭System PropertiesControl Panel
  • 返回工作目录,您需要将VSYASM-master.zip提取到文件夹中。您可能需要按照自述文件中的说明进行操作,也可以从上述下载的Github页面中阅读它们。我基本上只是从提升的命令提示符下运行bat文件。我应用了批处理文件,但我还将其与系统环境变量结合使用,稍后将需要使用它们。
  • 打开Visual Studio并创建一个空的win32控制台应用程序;没有预编译的头文件。您将要创建两个源文件main.cpp和一个任意* .asm文件。请遵循此简短教程,以确保Yasm和Visual Studio 2017协同工作:https://www.cs.uaf.edu/2017/fall/cs301/reference/nasm_vs/。如果CPP和ASM文件都可以自行编译,并且您可以构建而不会出错。然后,情况看起来不错。如果无法获得完整版本,请继续检查前面的步骤。有了干净的构建后,让我们验证Yasm是否正常工作。您将需要在不使用 Debug模式x64版本进行调试的情况下使用&来运行它。与网站上的程序唯一的不同是我在CPP文件中完成了此操作:

  • #include <iostream>
    
    extern "c" int foo( void ); // written in asm
    
    int main() {
        int x = foo();
        std::cout << x << '\n';
        std::cin.get(); // pause window from closing
        return 0;
    }
    

    如果您得到值7,则最好使用Yasm

    第3部分:-与Visual Studio和Python一起构建所需的库

    现在是时候弄湿了,开始使用Visual StudioPythonMPIR了。在我们深入之前;关闭除下载所有内容的工作文件夹以外的所有内容。这只是为了确保在进行此漫长的过程时没有任何差异。您可以选择系统上喜欢的任何文件夹,但是您需要记住该文件夹在哪里。最好将它与要链接的所有其他第三方依赖库放在驱动器的根附近。这样,很容易为每个库创建环境变量,并轻松设置它们的包含和链接路径。这取决于静态或动态库的使用,但这不在此设置的范围之内。我们只对构建库和运行测试感兴趣,以确保它们可以正常运行。拥有随附的MPIR PDF以及本网站http://panu28.blogspot.com/2017/06/multi-precision-mpir-mpfr-libraries.htm都是可以打开的。在两者之间,我能够使他们工作。我们不必担心网站上的第1步,因为该步骤已经处理完毕。在尝试运行python脚本mpir_config.py之前,我们需要进入工作文件夹。
  • 您想要将其解压缩到原处,因为它应该已经在文件夹中。解压缩后,删除名称中的所有符号和数字,以便该文件夹应如下所示:mpir。将此文件夹移到您希望库存在的文件夹中。不需要它,但是我们可以通过提取mpfr并从其名称中删除多余的字符来对mpfr执行相同的操作。它看起来应该像C:\Programming Libraries\mpirfr-vs2017\。在我的系统上,我有这种文件夹结构:mpir,这是活的mpfrmpfrc++-3.6.2.zip文件夹。对于最后一个mpfrc++-3.6.2,我们需要将其提取到一个文件夹中。该文件夹可以是complex。再一次,我们可以将其放置在与另一个文件夹相同的文件夹中。如果您还拥有mpir库,则可以将其放置在那里。您不必为该文件夹使用与我相同的名称,但是只要您知道它们所在的文件夹,就可以了。
  • 打开库工具包中的build.vc文件夹(这应该是未修改的发行版)。进入mpir_config.py文件夹。如果您安装了带有IDLE的Python,则右键单击IDLE 3.6 - 64bit并选择Run编辑。这将打开python。现在转到Run ModuleF5build.vc15。在这里,您要选择要构建的所有类型,但现在选择一种作为主要目标!然后按Enter键以使脚本接受参数。这些窗口保持打开状态!
  • 返回库目录并返回上一级,然后进入mpir.sln。在这里打开dll_mpir_core2_penryn,这将加载所有项目的Visual Studio。请勿尝试构建!
  • 如果您使用的是64位计算机,请确保您使用的是Release&x64。在python脚本中查找您想要的项目。由于我拥有Intel Core 2 Quad Core Extreme,因此我最终建立了以下库:lib_mpir_core2_penryn,对于静态库,我不得不做2个,以便c++支持lib_mpir_cxxProperties Page。现在不要尝试构建。我们需要检查一些设置,但是一旦完成一项设置,其余的设置应该类似。您要打开项目的Custom Build Step,并将其添加到Command Line字段中:$YASMPATH64\vyasm.exe,用于需要构建asm文件的每个项目。
  • 现在我们可以尝试构建了。不要尝试从顶部菜单构建,而是从Solution ExplorerRight Click-Project Only-Build Only中选择项目。如果这第一次成功,您将看到正在编译的asm文件,并且不会出现任何链接错误。如果没有,请检查您的设置。
  • 如果确实通过了,如果您恰巧从python脚本中选择了多个项目,则可以尝试从所选库中创建另一个库。如果第二个库确实发生故障,请不要担心。只需关闭Visual Studio和两个python窗口即可。返回库目录并返回上一级,然后根据所构建的库类型查看是否存在新的dll或lib文件夹。如果存在该库,请检查该库是否存在(dll或lib)。您将要查看64版本。如果存在,则yasm正常工作。如果不是或失败;继续检查设置。确保您的环境变量是正确的(因为这些变量应该来自上面的测试asm程序)。有时他们也对我失败。但是一旦我找到正确的路径以及其他所有内容:构建程序时,我并没有从主界面执行此操作。
  • 构建所有需要的库之后,我们继续进行本部分的第二阶段。现在,您可以关闭Python IDLE Windows和Visual Studio。

  • 8。接下来是构建测试库:从根mpir目录进入build.vc15打开mpir-tests.sln在此解决方案中,您想右键单击add-test-lib,并且只想构建它,但是确保它在Release64bit中。 ,然后可以右键单击解决方案并选择构建解决方案。这将建立约200个项目。他们都应该通过。我们不需要在这里更改任何设置。建立它们之后,我们可以关闭Visual Studio。
  • 返回库目录。我们刚刚打开解决方案的那条路。现在进入mpir-tests文件夹。滚动到底部,然后右键单击run-tests.py-使用IDLE - 64bit编辑。按F5键,等待几分钟。...如果一切正常,您将看到成功下降,并希望现在失败。在我的系统上,我收到一条晦涩的消息:Test skipped, replacing localeconv/nl_langinfo doesn't work,但是在python模块(脚本)的末尾,我收到了消息:203 tests: 203 ran correctly
  • 您可以关闭导出并关闭python窗口和Visual Studio。
  • 我们快到了! :)我可以闻到玫瑰或咖啡的味道!
  • 返回库中的一个目录并打开mpir-tune.sln。确保为所有项目设置了Releasex64。首先,您只想通过在解决方案资源管理器中右键单击来构建add-test-lib。在构建之后,转到底部项目tune并打开其Property Page,然后在Custom Build Step-General-Command Line下添加以下内容:$YASMPATH64\vyasm.exe。它是唯一依赖asm的项目。设置完之后,您可以从列表顶部的第二个开始构建其余项目。完成所有这5个操作后,您可以关闭Visual Studio。现在回到库目录中,您将要从run-speed.py中打开IDLE - 64并按F5键,或者双击它并在命令提示符下运行它。最后,您可以进入mpir根目录,并在dlllib文件夹中检入所有库文件。


  • 我希望这对有需要的人有所帮助,并且请考虑到此演练的目标是使用Visual Studio 2017CE v.15.6.6在Intel Core 2 Quad Extreme上实现Windows 7-64位家庭高级版。但是,这对于逐步构建所需的库可能是有用的。我不能保证它们是100%无错误的,但是它们都成功构建了。我确实注意到或看到了一些基本警告(转换-可能会丢失数据(截断)),对此内容的使用不安全,已被标记为已弃用等。但是我能够在没有编译器且没有编译器的情况下构建所有内容链接器错误。这个问题的答案是受github上一个评论部分的启发,该评论部分涉及我在遇到原始OP时遇到的特定链接器错误。您可以在Github/wbhart/mpir/issues/229找到该帖子。如果您有任何意见或疑问,请随时让我知道您的想法!
                                                                         --Enjoy--
    

    10-02 23:06