在 Visual Studio 中的 Windows 上安装 MPIR 时遇到问题?

Posted

技术标签:

【中文标题】在 Visual Studio 中的 Windows 上安装 MPIR 时遇到问题?【英文标题】:Having problems installing MPIR on Windows in Visual Studio? 【发布时间】:2018-04-13 14:56:55 【问题描述】:

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


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

注意:- 这是直接针对 x64 的

【问题讨论】:

我看到很多人将问题作为答案发布,但这是我第一次看到有人将答案作为问题发布 您应该将您的帖子编辑为“如何在 VS 中的 Windows 上安装 MPIR?”并将大部分内容放入答案中 同意@HongOoi - 如果您认为这很有用,请发布问题并回答它 @HongOoi 是的;昨晚我做完的时候已经很晚了;而且我太累了,不在乎,不想丢失我输入的内容,所以我只是快速发了一个帖子。现在应该是这样了。 @SeverinPappadeux 是的;昨晚我做完的时候已经很晚了;而且我太累了,不在乎,不想丢失我输入的内容,所以我只是快速发了一个帖子。现在应该是这样了。 【参考方案1】:

注意:我在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,但除非您在仅 x86 的计算机上,否则只需要 x64。然后,您可以将它们保存到桌面上的工作目录中。光靠这些是不行的。您将需要另一个 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,它的 PDF 在完成设置 MPIR 的步骤时非常有用。将这些保存到与上述相同的文件夹中。

    这与 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)\。将它们放在该目录中后,您可以删除从工作目录中提取它们的临时文件夹,但保留 zip 以供将来使用。

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

    您需要进入系统设置并添加 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。然后选择okay设置变量。您将对 64 位版本重复此操作。 Click Add 和(变量名:)YASMPATH64 和(变量值:)C:\Programming Files\yasm,然后单击确定。如果你仔细注意到我没有使用结尾\/,我是故意这样做的。稍后当我们将 yasm 设置为在 Visual Studio 中工作时,您将了解原因。 Click Okay 关闭Environment VariablesClick Okay 再次关闭System Properties 并关闭Control 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 是否正常工作。您将需要在调试模式 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 方依赖库一起放在驱动器的根目录附近。这样,很容易为每个库创建环境变量,并轻松设置它们的包含和链接路径。这将根据静态或动态库的使用而有所不同,但这超出了此设置的范围。我们只对构建库和运行测试以确保它们正常工作感兴趣。拥有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\,这是mpirmpfr 的文件夹。对于最后一个mpfrc++-3.6.2.zip,我们需要将其解压缩到一个文件夹中。该文件夹可以是mpfrc++-3.6.2。再次,我们可以将它放入我们将另一个放入的同一文件夹中。如果你也有complex 库,你可以把它放在那里。您不必像我一样为文件夹使用相同的名称,但只要您知道它们是什么文件夹,您就应该很好。

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

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

    如果您使用的是 64 位计算机,请确保您使用的是 Release & x64。查找您从 python 脚本中为您想要的项目选择的项目。因为我有一个 Intel Core 2 Quad Core Extreme,所以我最终构建了这些库:dll_mpir_core2_penryn,对于静态我必须做 2 以获得 c++ 支持lib_mpir_core2_penrynlib_mpir_cxx。现在不要尝试构建。我们需要检查一些设置,但一旦你做了一项,其余的应该会有所不同。您要打开项目的Properties 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 程序)。有时他们也对我失败了;但是一旦我找到了正确的路径和其他一切:当我构建程序时,我并没有从主界面执行它。

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

8 .接下来是构建测试库:从根目录 mpir 进入 build.vc15 打开 mpir-tests.sln 在此解决方案中,您想右键单击 add-test-lib 并且您只想构建它但确保它在Release & 64bit 这样构建成功后,您可以右键单击解决方案并选择构建解决方案。这将建立大约 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

    您可以关闭exit并关闭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。现在回到库目录,您将要从IDLE - 64 打开run-speed.py 并按F5,或者您可以双击它并通过命令提示符运行它。最后,您可以进入根目录 mpir 并检查 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--

【讨论】:

能否将已经构建好的库发给我,以便直接使用?谢谢。

以上是关于在 Visual Studio 中的 Windows 上安装 MPIR 时遇到问题?的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio Command Window 2010 命令可以在脚本中执行吗

Visual Studio代码中的活动栏宽度

在 Visual Studio Window Form 的面板上使用不透明度的任何技巧?

在 Window 10 的 Visual Studio 中为 64 位编译时,Wow64DisableWow64FsRedirection() 函数不起作用

如何在Visual Studio代码中检测文档中语言的变化?

Visual Studio Code 设置透明背景图片