Fra*_*ler 0 c++ python windows mpir visual-studio-2017
在过去的三天里,我一直在尝试在 Windows 7 上使用 VS2017 构建库,以下是我能想到的:
如果您在 Windows 7 64 位上使用 Visual Studio 2017 时遇到 MPIR 问题。您可以按照以下步骤操作。如果您使用的是 Windows 8 或 10,它可能与 Windows 目录略有不同,但概念应该仍然相同。您仍然可以使用它作为指南,只需对目录设置进行少量修改即可。
注意: - 这是直接针对 x64
注意:我做了x64&中的所有内容release。我没有做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,其 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 Start, Right Click Computer, Select Properties。在左手侧Click Advanced System Properties。(如果您使用的是 Windows 8 或 10,这可能会有所不同)。获得System Properties Dialog Boxup 后,您将需要选择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 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;
}
Run Code Online (Sandbox Code Playgroud)
如果您得到的值是 7。我们很乐意与您合作Yasm。
第 3 部分: -使用 Visual Studio 和 Python 构建所需的库
现在是时候让我们开始工作并开始使用Visual Studio,Python和MPIR。在我们深入之前;关闭除所有内容下载到的工作文件夹之外的所有内容。这只是为了确保在经历这个漫长的过程时不会出现任何差异。您可以选择系统上您喜欢的任何文件夹,但您需要记住该文件夹的位置。最好将其放置在靠近您链接的所有其他第 3 方依赖库的驱动器的根目录处。这样,就可以轻松地为每个库创建环境变量,并轻松设置它们的包含和链接路径。这将根据静态或动态库的使用而有所不同,但这超出了此设置的范围。我们只对构建库并运行测试以确保它们正常工作感兴趣。最好打开随附的 PDFMPIR以及此网站: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和mpfr活动。对于最后一个,mpfrc++-3.6.2.zip我们需要将其解压到一个文件夹中。该文件夹可以是mpfrc++-3.6.2. 我们可以再次将其放入与另一个文件夹相同的文件夹中。如果你也有图书馆complex,你可以把它放在那里。您不必像我一样为文件夹使用相同的名称,但只要您知道它们全部位于哪个文件夹中,您应该就可以了。
打开mpir库工具包中的文件夹(这应该是未修改的发行版)。进入build.vc文件夹。如果您使用 IDLE 安装了 Python,则右键单击mpir_config.py并选择编辑,IDLE 3.6 - 64bit这将打开 python。现在转到Run&Run Module或F5。在这里,您想要选择您想要构建的所有类型,但现在选择一个作为您的主要目标!然后按 Enter 键让脚本接受参数。让这些窗户保持打开状态!
返回到库目录并导航回上一层,然后进入build.vc15. 在这里打开mpir.sln这将加载 Visual Studio 的所有项目。请勿尝试构建!
如果您使用的是 64 位计算机,请确保您使用的是 Release & x64。查找您从 python 脚本中选择的项目作为您想要的项目。由于我有一个 Intel Core 2 Quad Core Extreme,我最终构建了这些库:dll_mpir_core2_penryn对于静态,我必须为 c++ 支持lib_mpir_core2_penryn&做 2 个lib_mpir_cxx。现在先不要尝试构建。我们需要检查一些设置,但一旦完成一项设置,其余的应该会有所不同。您想要打开项目Properties Page,然后Custom Build Step将其添加到Command Line字段:$YASMPATH64\vyasm.exe对于每个需要构建 asm 文件的项目。
现在我们已准备好尝试构建。不要尝试从顶部菜单中构建,而是从Solution Explorer和Right 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 openmpir-tests.sln 在此解决方案中,您想右键单击add-test-lib并且只想构建它,但确保它位于Release&64bit成功构建后,然后您可以右键单击在解决方案上并选择构建解决方案。这将建设约200个项目。他们应该都会通过。我们不需要在这里更改任何设置。构建完成后我们可以关闭视觉工作室。
返回到库目录。与我们刚刚打开的解决方案相同的路径。现在进入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. 确保您已为所有项目进行设置Release。 首先,您只想通过在解决方案资源管理器中右键单击它来x64构建。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目录并检查所有库文件的dll和文件夹。lib
我希望这对有需要的人有所帮助,并且请注意,本演练针对的是使用 Visual Studio 2017CE v. 15.6.6 的 Intel Core 2 Quad Extreme 上的 Windows 7 - 64 位 Home Premium。然而,这作为构建所需库的一般逐步公会很有用。我不能保证它们 100% 无错误,但它们都构建成功。我确实注意到或看到了一些基本警告(转换 - 可能会丢失数据(截断)),不安全地使用这个或那个,这已被标记为已弃用等。但我能够在没有编译器的情况下构建所有内容链接器错误。这个问答的灵感来自 github 上的一个评论部分,该部分涉及我在原始 OP 中遇到的特定链接器错误。您可以在此处找到该帖子Github/wbhart/mpir/issues/229。如果您有任何意见或问题,请随时告诉我您的想法!
--Enjoy--
Run Code Online (Sandbox Code Playgroud)