1

在过去的 3 天里,我一直在尝试在 Windows 7 上使用 VS2017 构建库,这就是我能够想出的:


如果您在让 MPIR 在 Windows 7 64 位上使用 Visual Studio 2017 时遇到问题。您可以按照以下步骤操作。如果您使用的是 Windows 8 或 10,它可能与 windows 目录略有不同,但概念应该仍然相同。您仍然可以将其用作指南,只需对目录设置进行少量修改。

注意: - 这直接针对 x64

4

1 回答 1

4

注意:我在x64&中做了所有事情release。我没有做debug也没有x86.


第 1 部分: -第一部分涉及获取设置所有内容所需的所有工具:

  1. 确保在 Visual Studio 中安装了最新版本的 Python。编写一个脚本并对其进行测试以确保 Python 正常工作。拥有 Python 的 IDLE 也非常方便。它将使您不必将其加载到 VS 中来执行运行脚本的简单重复任务。对于开发,我可能会坚持使用 Visual Studio 的 IDE。

  2. 如果您在 Windows 上,您将需要 vyasm:您可以从这里获得最新的发行版:http: //yasm.tortall.net/Download.html。您可以同时下载 Visual Studio 2010 的 Win32 和 Win64 zip,但除非您在仅 x86 的计算机上,否则只需要 x64。然后,您可以将它们保存到桌面上的工作目录中。光靠这些是不行的。您将需要另一个 yasm 工具才能在 Windows 上正确使用 Visual Studio 2017。您还必须配置一些东西。您还需要此克隆,您可以将其下载为 zip,这将有助于让 yasm 与 Visual Studio 一起正常工作。可以在这里找到:https ://github.com/ShiftMediaProject/VSYASM. 将其保存到同一个工作目录中,但目前还没有做任何事情。在我们拥有所需的其余工具后,我们将回到这一点。

  3. 从此处获取最新的未修改 MPIR 发行版 3.0.0 及其文档:http: //mpir.org/downloads.html。我使用了 MPIR 源 zip,它的 PDF 在完成设置 MPIR 的步骤时非常有用。将这些保存到与上述相同的文件夹中。

  4. 这与 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是旨在集成到视觉工作室而不是通用版本的)版本。

  1. 在工作目录中,您要将其解压缩vsyasm-1.3.0-win32.zip到一个名为yasm. 完成后,您将希望将其放入C:\Program Files (x86)\. 将它们放在该目录中后,您可以删除从工作目录中提取它们的临时文件夹,但保留 zip 以供将来使用。

  2. 在同一个工作目录中,您希望vsysam-1.3.0.win64.zipyasm. 除了它将进入win 64导演之外,同样的事情:C:\Program Files\。完成此操作后,您将需要删除工作目录中的临时文件夹。

  3. 您将需要进入系统设置并添加 2 个环境变量。如果您不知道该怎么做,我将指导您:Click Start, Right Click Computer, Select 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. 然后选择okay设置变量。您将对 64 位版本重复此操作。Click Add和 for (变量名:)YASMPATH64和 for (变量值:)C:\Programming Files\yasm并单击确定。如果你仔细注意到我没有使用结尾\,或者/我是故意这样做的。稍后当我们将 yasm 设置为在 Visual Studio 中工作时,您将了解原因。Click Okay关闭Environment VariablesClick Okay再次关闭System Properties和关闭Control Panel

  4. 回到工作目录,您将要解压VSYASM-master.zip到一个文件夹。您将需要按照自述文件中的说明进行操作,或者您可以从上面下载的 Github 页面中阅读它们。我基本上只是bat从提升的命令提示符运行文件。我应用了批处理文件,但我也将它与稍后需要的系统环境变量结合使用。

  5. 打开 Visual Studio 并创建一个空的 win32 控制台应用程序;没有预编译的头文件。您需要创建两个源文件 main.cpp 和一个任意 *.asm 文件。按照这个简短的教程来确保Yasm和 Visual Studio 2017 一起工作:https ://www.cs.uaf.edu/2017/fall/cs301/reference/nasm_vs/ 。如果 CPP 和 ASM 文件都自行编译,并且您可以毫无错误地构建。然后事情看起来不错。如果您无法获得干净的构建,请继续检查前面的步骤。一旦你有一个干净的构建,让我们验证 Yasm 是否正常工作。您将需要在调试模式 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. 在我们潜入之前;关闭所有内容,除了下载所有内容的工作文件夹。这只是为了确保在经历这个漫长的过程时没有任何差异。您可以在系统上选择您喜欢的任何文件夹,但您需要记住该文件夹的位置。最好将它与您链接的所有其他 3rd 方依赖库一起放在驱动器的根目录附近。这样,很容易为每个库创建环境变量,并轻松设置它们的包含和链接路径。这将根据静态或动态库的使用而有所不同,但这超出了此设置的范围。我们只对构建库和运行测试以确保它们正常工作感兴趣。拥有随附的 PDFMPIR很高兴打开这个网站: http: //panu28.blogspot.com/2017/06/multi-precision-mpir-mpfr-libraries.htm。在两者之间,我能够让他们工作。我们不必担心网站上的第 1 步,因为这已经处理好了。在我们尝试运行 python 脚本之前,mpir_config.py我们需要转到我们的工作文件夹。

  1. 您想将它提取到它所在的位置,因为它应该已经在一个文件夹中。提取后,删除名称中的所有符号和数字,使文件夹看起来像这样:mpir. 将此文件夹移动到您希望库存在的文件夹中。mpfr它不是必需的,但我们可以通过提取它并从其名称中删除多余的字符来做同样的事情。它应该看起来像mpfr。在我的系统上,我有这种文件夹结构:C:\Programming Libraries\mpirfr-vs2017\ 这是文件夹mpir并且是mpfr实时的。对于最后一个mpfrc++-3.6.2.zip,我们需要将其解压缩到一个文件夹中。该文件夹可以是mpfrc++-3.6.2. 再次,我们可以将它放入我们将另一个放入的同一文件夹中。如果你也有complex图书馆,你可以把它放在那里。您不必像我一样为文件夹使用相同的名称,但只要您知道它们是什么文件夹,您就应该很好。

  2. 打开mpir库工具包中的文件夹(这应该是未修改的发行版)。进入build.vc文件夹。如果您使用 IDLE 安装了 Python,则右键单击mpir_config.py并选择编辑,IDLE 3.6 - 64bit这将打开 python。现在转到Run&Run ModuleF5。在这里,您要选择所有要构建的类型,但现在选择一个作为您的主要目标!然后按回车键让脚本接受参数。让这些窗户保持打开状态!

  3. 返回库目录并导航回一级,然后进入build.vc15. 在这里打开mpir.sln这将加载所有项目的 Visual Studio。不要尝试构建!

  4. 如果您使用的是 64 位机器,请确保您使用的是 Release & x64。查找您从 python 脚本中为您想要的项目选择的项目。因为我有一个 Intel Core 2 Quad Core Extreme,所以我最终构建了这些库:dll_mpir_core2_penryn对于静态,我必须为 c++ support lib_mpir_core2_penryn&做 2 个lib_mpir_cxx。现在不要尝试构建。我们需要检查一些设置,但一旦你做了一项,其余的应该会有所不同。您要打开项目Properties Page并将Custom Build Step其添加到Command Line字段中:$YASMPATH64\vyasm.exe对于每个需要构建 asm 文件的项目。

  5. 现在我们准备好尝试构建了。不要尝试从顶部的菜单构建,而是从Solution ExplorerRight Click- Project Only-中选择项目Build Only。如果这首先成功,您将看到正在编译的 asm 文件,并且您应该没有链接错误。如果没有检查您的设置。

  6. 如果它通过了,如果您碰巧从 python 脚本中选择了多个项目,您可以尝试从您选择的库中创建另一个库。如果第二个库确实发生故障,请不要担心。只需关闭 Visual Studio 和两个 python 窗口。返回库目录并返回上一级,根据您构建的库类型查看是否存在新的 dll 或 lib 文件夹。如果存在,请进入并检查库是否存在(dll 或 lib)。您将希望查看 64 版本。如果存在,则 yasm 工作正常。如果不是或失败;继续检查设置。确保您的环境变量是正确的(应该来自上面的测试 asm 程序)。有时他们也对我失败了;但是一旦我找到正确的路径和其他一切:

  7. 在构建完所有想要的库之后,我们将进入这部分的第 2 阶段。您现在可以关闭 Python IDLE Windows 和 Visual Studio。

8. 接下来是构建测试库:从根mpir目录进入build.vc15 openmpir-tests.sln 在此解决方案中,您要右键单击add-test-lib并且只想构建它但确保它在Release&64bit构建成功后,您可以右键单击在解决方案上并选择构建解决方案。这将建立大约 200 个项目。他们都应该通过。我们不需要在这里更改任何设置。建成后,我们可以关闭视觉工作室。

  1. 回到库目录。与我们刚刚打开的解决方案相同的路径。现在进入mpir-tests文件夹。滚动到底部并右键单击run-tests.py- Edit with IDLE - 64bit。按 F5 并等待几分钟......如果一切顺利,您将看到成功下降,希望现在失败。在我的系统上,我收到一条晦涩的消息:Test skipped, replacing localeconv/nl_langinfo doesn't work但是在 python 模块(脚本)的末尾,我收到了消息:203 tests: 203 ran correctly.

  2. 您可以关闭退出并关闭 python 窗口和 Visual Studio。

  3. 我们就快到了!:) 我能闻到玫瑰或咖啡的味道!

  4. 返回库中的一个目录并打开mpir-tune.sln. 确保您已为所有项目设置Release并 设置。首先,您只想通过在解决方案资源管理器中右键单击它x64来构建。add-test-lib之后构建转到底部项目tune并打开它Property Page然后在Custom Build Step-添加这个General:。它是唯一依赖. 设置好之后,您可以从列表自上而下的第二个开始构建其余项目。构建完所有 5 个之后,您可以关闭 Visual Studio。现在回到库目录,您将要打开from并按 F5,或者您可以双击它并通过命令提示符运行它。最后你可以进入根目录Command Line$YASMPATH64\vyasm.exeasmrun-speed.pyIDLE - 64mpir目录并检查所有库文件的dlllib文件夹。


我希望这对有需要的人有所帮助,并且请考虑到本演练针对的是使用 Visual Studio 2017CE v. 15.6.6 的英特尔酷睿 2 Quad Extreme 上的 Windows 7 - 64 位家庭高级版。然而,这对于构建所需库的一般一步一步的行会很有用。我不能保证它们 100% 没有错误,但它们都成功构建了。我确实注意到或看到了一些基本警告(转换 - 可能是数据丢失(截断)),不安全地使用这个或那个,这已被标记为已弃用等。但是我能够在没有编译器和没有编译器的情况下构建所有内容链接器错误。这个 Q/A 的灵感来自 github 上关于我在原始 OP 遇到时遇到的特定链接器错误的评论部分。你可以在这里找到那个帖子Github/wbhart/mpir/issues/229。如果您有任何意见或问题,请随时让我知道您的想法!

                                                                     --Enjoy--
于 2018-04-13T17:38:46.453 回答