非常教程

Erlang 20参考手册

指南:安装指南 | Guide: Installation guide

4.如何在Windows上构建Erlang / OTP | 4. How to Build Erlang/OTP on Windows

目录

  • Introduction
  • Short Version
  • Frequently Asked Questions
  • Tools you Need and Their Environment
  • The Shell Environment
  • Building and Installing
  • Development
  • Using GIT

4.1介绍

本节介绍如何在Windows上构建Erlang模拟器和OTP库。请注意,如果没有Microsoft的开发工具和/或不想安装Cygwin,MSYS或MSYS2,Windows二进制版本仍然是首选替代方案。

这些说明适用于支持Cygwin模拟gnuish环境或MSYS或MSYS2 ditto的Windows版本。我们构建在以下平台上:Windows 2012,Windows 7,Windows 8和Windows 10.也可以在较旧的平台上构建,但您可能无法在适当的Microsoft SDK,Visual Studio或OpenSSL中安装哪种情况下你需要返回到早期的编译器等。

所描述的过程使用Cygwin,MSYS或MSYS2作为构建环境。你在Cygwin / MSYS / MSYS2中运行bash shell并使用gnu make / configure / autoconf等来编译。但是,仿真器C源代码大多是使用Microsoft Visual C ++™编译生成本机Windows二进制文件。这与我们用于构建预构建二进制文件的过程相同。为什么我们使用VC ++而不是gcc在FAQ部分进一步解释。

如果你不熟悉Cygwin,MSYS,MSYS2或者Unix环境,你可能需要阅读一下它的工作原理。有很多关于这个在线的文档。

这些说明适用于32位和64位Windows。请注意,即使您构建了64位版本的Erlang,涉及的大多数目录和文件仍然命名为win32。然而,名称win64的一些发生却存在。例如,Erlang的64位Windows版本的安装文件是otp_win64_20.exe

如果您对环境和构建系统感到满意,并拥有所有必要的工具,那么您将有更好的机会让Windows的Erlang / OTP分发更好。请提交任何建议给我们JIRA和补丁,git project让他们找到进入下一版Erlang的方法。如果对构建系统进行更改(如makefile等),请记住在Unix / VxWorks上使用相同的makefile,以便您的更改不会破坏其他平台。这当然也适用于C代码。系统特定的代码主要驻留在$ERL_TOP/erts/emulator/sys/win32$ERL_TOP/erts/etc/win32目录中。该$ERL_TOP/erts/emulator/beam目录用于通用代码。

我们已经使用这个构建过程来发布几个版本,并且它对我们来说工作得很好。但是,不同的机器和不同的设置可能会有各种各样的麻烦。无论遇到什么困难,我们都会尽力给出提示,但请使用erlang-questions邮件列表分享您的经验。当然,我们不能帮助所有人解决所有问题,所以请尝试解决这些问题并提交解决方案/解决方法。

让我们去吧!我们将从一个简短版本的设置程序开始,然后是一些常见问题解答,然后我们将详细介绍设置。

4.2短版

在下面的章节中,我们尽可能多地描述了所需工具的安装。一旦安装了这些工具,建筑物就非常容易。我们也试图让Unix操作系统有限的用户理解这些指令。Cygwin / MSYS / MSYS2对于一些Windows用户来说是一个全新的环境,为什么仔细解释环境变量等似乎已经到位。

尽管这是一个短小的故事,但对于经验丰富和急躁的人来说:

  • 获取并安装完整的Cygwin(最新版),使用MSYS完成MinGW或完成MSYS2
 - 安装Visual Studio 12.0(2013) 
 - 安装微软Windows SDK 8.1 
 - 获取并安装Sun的JDK 1.6.0或更高版本 
 - 获取并安装NSIS 2.01或更高版本(最高可尝试并工作2.46) 
 - 使用静态库获取,构建和安装OpenSSL 0.9.8r或更高版本(高达1.0.2d尝试&工作)。 
 - 从[`http://www.erlang.org/download.html`](http://www.erlang.org/download.html)获取Erlang源代码发行版),并使用Cygwin的/ MSYS / MSYS2的` tar`。 
 - 将`ERL_TOP`设置为解包源代码分发的位置 
-  `$ cd $ERL_TOP` 
 - 修改PATH和其他环境变量,以便所有这些工具都可以从bash shell运行。仍然站在`$ ERL_TOP`中,发出以下命令(对于32位Windows,从第一行中删除x64,并在最后一行将`otp_win64_20`改为`otp_win32_20`):$ eval ./otp\_build env\_win32 x64$ ./otp_build autoconf $。 / otp_build configure $ ./otp_build boot -a $ ./otp_build release -a $ ./otp_build installer_win32 $ release / win32 / otp_win64_20 / S

瞧!Start->Programs->Erlang OTP 20->Erlang启动Erlang Windows shell。

4.3常见问题

  • 问:那么,现在我可以在Windows上使用GCC来构建Erlang了?答:不,不幸的不是。您仍然需要Microsoft的Visual C ++。Bourne-shell脚本(cc.sh)封装了Visual C ++编译器并在Cygwin环境中运行它。构建Erlang所需的所有其他工具都是自由软件/开放源码,但不是C编译器。然而,Windows SDK足以构建Erlang,您无需购买Visual C ++,只需下载SDK(SDK版本8.1 == Visual studio 2013)即可。
  • 问:那你为什么还没有摆脱VC ++呢?答:嗯,部分是因为它是一个好的编译器 - 真的!实际上,在后期的R11版本中,可以使用mingw而不是Visual C ++来构建(您可能会在某些脚本和目录中看到这些残留)。不幸的是,用于Windows的SMP版本的开发打破了mingw版本,并且我们选择专注于VC ++版本,因为在VC ++版本中性能更好。mingw build可能会回来,但只要VC ++提供更好的性能,商业版本将成为VC ++版本。
  • 问:好的,你需要VC ++,但现在你已经开始要求一个相当新的(和昂贵的)版本的Visual Studio。为什么?A:嗯,它不贵,它是免费的(如免费啤酒)。只需从Microsoft下载并安装最新的Windows SDK,并且您需要的所有工具都在那里。包含的调试器(WinDbg)也非常实用。这就是我在将Erlang移植到64位Windows时所使用的。使用更高版本的Microsoft编译器的另一个原因是DLL兼容性。如果虚拟机使用旧的VC ++版本进行编译,那么使用新版标准库的DLL可能无法加载。所以我们应该瞄准使用最新的免费SDK和编译器。
  • 问:我能/将用你描述的程序构建一个Cygwin二进制文件吗?答:不,结果将是一个纯粹的Windows二进制文件,据我所知,目前还无法制作Cygwin二进制文件。这当然是可取之事,但动态链接(动态Erlang驱动程序加载)以及Cygwin中的TCP / IP仿真仍然存在一些问题,我相信这一点会改进,但仍然存在一些问题。解决这些问题可能很简单,也可能很难。我建议你尝试一下,分享你的经验。如果一个简单的./configure && make产生完全成熟的Cygwin二进制文件,没有人会更高兴。
  • 问:哈哈,我看到你了,尽管你说过你没用,但你还是使用了GCC!答:好的,我承认,其中一个文件是使用Cygwin或MinGW的GCC编译的,然后使用一个小的C hack将产生的目标代码转换为MS VC ++兼容的coff。这是因为该特定文件beam_emu.c能够使用GCC label-as-values扩展,从而使仿真器性能提高达50%,从而获益匪浅。遗憾的是,这并不意味着所有的OTP都可以使用GCC编译。这个特定的源代码没有做任何系统特定的事情,并且实际上被采用到了GCC被用来在Windows上编译它的事实。
  • 问:那么现在有一个MS VC ++项目文件,我可以使用漂亮的VC ++ GUI构建OTP?答:不,从不。保持项目文件最新的麻烦以及从VC ++ GUI执行构建OTP构建的所有步骤简直是不值得的,甚至可能是不可能的。Erlang / OTP的VC ++项目文件永远不会发生。
  • 问:那么它是如何工作的?答:Cygwin,MSYS或MSYS2是与任何Unix机器上的环境非常相似的环境。这几乎就像你在Windows里有一台虚拟的Unix机器一样。在给定某些参数的情况下配置,然后创建由环境的gnu-make用于构建系统的makefile。然而,大多数实际的编译器等并不是Cygwin / MSYS / MSYS2工具,所以我们编写了几个包装器(Bourne-shell脚本),它们驻留在$ERL_TOP/etc/win32/cygwin_tools和中$ERL_TOP/etc/win32/msys_tools。他们都在Unix环境中进行通用参数和开关的转换,以适应本地Windows工具。最值得注意的是Cygwin / MSYS / MSYS2中的路径是带有“正斜杠”(/)且没有驱动器号的类Unix路径。Cygwin特定的命令cygpath用于Cygwin环境中的大部分路径转换。在相应的MSYS和MSYS2环境中使用其他工具(需要时)。幸运的是,大多数编译器接受正斜杠而不是反斜杠作为路径分隔符,但仍然必须获得驱动器号等。包装器脚本不是通用的,例如,cc.sh会理解和翻译每个可能的gcc选项并将正确的选项传递给cl.exe。原则是这些脚本足够强大,足以允许构建Erlang / OTP,不多也不少。他们可能需要扩展来处理Erlang开发过程中的变化,这就是我们将它们制作成shell脚本而不是Perl脚本的原因之一。我们相信他们更容易理解和改变。在$ERL_TOP,有一个脚本叫otp_build。该脚本处理的给所有正确的参数的麻烦configure/ make,还可以帮助你树立正确的环境变量与在Cygwin的/ MSYS / MSYS2 Erlang的源工作。
  • 问:您使用并需要Cygwin,但您没有花时间将Erlang移植到Cygwin环境,而是专注于您的商业版本,这是否真的道德?答:不,不是,但将此视为朝着正确方向迈出的一步。
  • 问:我可以制作与商业版本完全相同的内容吗?答:是的,我们使用完全相同的构建过程。
  • 问:那么您使用的是哪种版本的Cygwin / MSYS / MSYS2和其他工具?答:对于Cygwin,MSYS和MSYS2,我们尝试使用构建时提供的最新版本。你使用什么版本应该不重要。我们尝试为我们在不同Cygwin / MSYS / MSYS2版本中发现的错误提供解决方法。请尽快为您遇到的新Cygwin / MSYS / MSYS2相关错误添加解决方法。也请将错误报告提交给适当的Cygwin,MSYS和/或MSYS2开发人员。我们用于20的GCC版本是4.8.1(MinGW 32bit)和4.8.5(MSYS2 64bit)。我们使用了VC ++ 12.0(即Visual Studio 2013),Sun的JDK 1.6.0_45(32位)和Sun的JDK 1.7.0_1(64位),NSIS 2.46和Win32 OpenSSL 1.0.2d。请阅读下一节,了解您需要的详细信息。
  • 问:你能帮我在Cygwin / MSYS / MSYS2中设置X吗?答:不,很遗憾,我们没有时间帮助Cygwin / MSYS / MSYS2相关的用户问题,请阅读相关网站,新闻组和邮件列表。

4.4您需要的工具及其环境

您需要一些工具才能在Windows上构建Erlang / OTP。最值得注意的是,您需要Cygwin,MSYS或MSYS2,Visual Studio和Microsofts Windows SDK,但您可能还需要Java编译器,NSIS安装系统和OpenSSL。那么,这里有一些关于不同工具的信息:

  • Cygwin,最新的通常是最好的。获取所有开发工具,当然还有所有基本的同上。确保获得jar并确保不要安装Cygwin'ish Java,因为使用了Cygwin jar命令,但使用了Sun的Java编译器和虚拟机。如果你打算建立一个64位的Windows版本,你应该确保使用Cygwin安装MinGW的64位gcc。它在其中一个开发包中。URL:http://www.cygwin.com 从网站获取安装程序并使用它来安装Cygwin。一定要有公平的权利。如果您位于NT域,您应该考虑运行,mkpasswd -dmkgroup -d在安装后使用户数据库正确。请参阅各自的手册页。当你开始你的第一个bash shell时,你会得到一个糟糕的提示。你也可能有一个PATH包含反斜杠等的环境变量。编辑$HOME/.profile$HOME/.bashrc设置公平提示和正确的PATH。还做了一个export SHELL.profile。由于某些不明显的原因,该环境变量$SHELL未在bash中导出。另外请注意,它.profile是在登录时和.bashrc子shell被创建时运行的。如果您想要在那里运行登录时的命令(如设置别名,shell函数等),您需要明确地.bashrc从源代码中获取信息.profile。例如,你可以在最后这样做.profile:ENV = $ HOME / .bashrc export ENV。$ ENV您可能还想要设置X-windows(XFree86)。这可能与从命令提示符运行startx一样简单,可能会更困难。使用Google寻找帮助。如果您不使用X-windows,则可能需要通过在控制台系统菜单(窗口左上角,标题栏中的Cygwin图标)中选择属性来设置Windows控制台窗口。尤其是设置更大的屏幕缓冲区大小(线条)非常有用,因为它可以让您获得滚动条,因此您可以看到可能出现的任何错误消息。还有其他一些可用的shell,但是在下面的所有示例中,我们假设您使用bash。
  • 或者你可以下载MinGW和MSYS。您可以在以下网址找到最新的安装程序:URL:http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/ 确保安装基本的开发工具,但避免使用MinGW autoconf并安装msys。

为了能够构建64位虚拟机,您还需要64位MinGW编译器:

URL: http://sourceforge.net/projects/mingw-w64/files/latest/download?source=files

我们已经尝试了1.0,但最新版本应该做。确保你下载了mingw-w64-bin_i686-mingw_<something>.zip,而不是Linux版本。您将MinGW安装(c:\MinGW)的顶部解压缩包,就是这样。

  • 第三种方法是从以下网址下载并安装MSYS2:https://msys2.github.io/ 当您按照说明操作时,还需要安装以下软件包:autoconf,make,perl和tar。您可以通过在msys控制台中运行以下命令来执行此操作:pacman -S msys / autoconf msys / make msys / perl msys / tar您还需要一个gcc。如果你安装了你运行的64位MSYS2:mingw64 / mingw-w64-x86_64-gcc和32位MSYS2:pacman -S mingw32 / mingw-w64-i686-gcc pacman -S mingw-w64-i686-editrights
  • Visual Studio 2013(Visual Studio 12.0)。从以下网址下载并运行Web安装程序:https: //www.visualstudio.com/
  • 微软Windows SDK版本8.1(对应于VC ++ 12.0和Visual Studio 2013)。你可以在这里找到它:URL:https://msdn.microsoft.com/en-us/windows/desktop/bg162891.aspx
  • 为了帮助设置环境,有一个bat文件%PROGRAMFILES%\Mirosoft Visual Studio 12.0\VC\vcvarsall.bat,它是Windows命令提示符的适当环境。这不适用于bash,所以你需要通过编辑你的脚本来将它转换成bash风格的环境.bash_profile。在我的情况下,SDK安装在默认目录中并且%PROGRAMFILES%C:\Program Files,用于设置32位编译环境(在64位或32位机器上)的命令如下所示(在Cygwin中):一些常用路径C_DRV = / cygdrive / c PRG_FLS = $ C_DRV / Program \ Files#nsis NSIS_BIN = $ PRG_FLS / NSIS#java JAVA_BIN = $ PROGRAMFILES / Java / jdk1.7.0_02 / bin ## ## MS SDK ## CYGWIN = nowinsymlinks VISUAL_STUDIO_ROOT = $ PRG_FLS / Microsoft \ Visual \ Studio \ 12.0 WIN_VISUAL_STUDIO_ROOT =“C:\ Program Files \ Microsoft Visual Studio 12.0“SDK = $ PRG_FLS / Windows \ Kits / 8.1 WIN_SDK =”C:\ Program Files \ Windows Kits \ 8.1“PATH =”$ NSIS_BIN:\ $ VISUAL_STUDIO_ROOT / VC / bin:\ $ VISUAL_STUDIO_ROOT / VC / vcpackages:\ $ VISUAL_STUDIO_ROOT / Common7 / IDE:\ $ VISUAL_STUDIO_ROOT / Common7 / Tools:\ $ SDK / bin / x86 / usr / local / bin:/ usr / bin:/ bin:\ / cygdrive / c / WINDOWS / system32:/ cygdrive / c / WINDOWS:\ / cygdrive / c / WINDOWS / system32 / Wbem:\ $ JAVA_BIN“LIBPATH =”$ WIN_VISUAL_STUDIO_ROOT \ VC \ lib“LIB =”$ WIN_VISUAL_STUDIO_ROOT \ VC \ lib \; $ WIN_SDK \ lib \ winv6.3 \ um \ x86“INCLUDE =”$ WIN_VISUAL_STUDIO_ROOT \ VC \ include \; $ WIN_SDK \ include \ shared \ \ $ WIN_SDK \ include \ um; $ WIN_SDK \ include \ winrt \; $ WIN_SDK \ include \ um \ gl“export CYGWIN PATH LIBPATH LIB INCLUDEI如果您使用的是MinGW的MSYS,则需要更改C_DRV设置,它将显示为:C_DRV = / c,并且还需要将PATH环境变量更改为:MINGW_BIN = / c / MinGW / bin PATH =“$ NSIS_BIN:\ $ VISUAL_STUDIO_ROOT / VC / bin:\ $ VISUAL_STUDIO_ROOT / VC / vcpackages:\ $ VISUAL_STUDIO_ROOT / Common7 / IDE:\ $ VISUAL_STUDIO_ROOT / Common7 / Tools:\ $ SDK / bin / x86:/ usr / local / bin:\ $ MINGW_BIN:\ / bin:/ c / Windows / system32:/ c / Windows:\ / c / Windows / System32 / Wbem:\ $ JAVA_BIN“对于MSYS2,您使用与C_DRVMSYS 相同的PATH,只更新MINGW_BIN:MINGW_BIN = / mingw32 / bin如果你正在构建一个64位版本的Erlang,你应该设置PATH等等。我们有两个模板可以在Cygwin和MSYS中使用,但需要进行编辑才能使用MSYS2(请参阅脚本中的注释)。以下是32位:make_winpath(){P = $ 1,如果“$ IN_CYGWIN”=“true”; 然后cygpath -d“$ P”else(cd“$ P”&& / bin / cmd // C“for%i in(”。“)do @echo%〜fsi”)fi} make_upath(){P = $ 1如果“$ IN_CYGWIN”=“true”; 然后cygpath“$ P”else回显“$ P”| / bin / sed's,^(a-zA-Z):\,/ \ L \ 1 / ,; s,\,/,g'fi}#一些常用路径如果-x / usr / bin / msys- ?.0.dll; 那么#没有这个路径转换赢' \ $ SDK / bin / x86 ## Microsoft SDK库LIBPATH = $ WIN_VISUAL_STUDIO_ROOT \ VC \ lib \ amd64 LIB = $ WIN_VISUAL_STUDIO_ROOT \ VC \ lib \ amd64 \; \ $ WIN_KITS \ lib \ winv6.3 \ um \ x64 INCLUDE = $ WIN_VISUAL_STUDIO_ROOT \ VC \ include \; \ $ WIN_KITS \ include \ shared \; $ WIN_KITS \ include \ um; \ $ WIN_KITS \ include \ winrt \; $ WIN_KITS \ include \ um \ gl#将nsis,c编译器和java放入路径导出PATH = $ VCPATH:$ PATH:$ JAVA_BIN:$ NSIS_BIN#确保LIB和INCLUDE可用于其他导出LIBPATH LIB INCLUDEM一定要设置PATH,以便在MSYS / Cygwin工具和Java之前找到NSIS和Microsoft SDK是PATH中的最后一个。创建一个简单的hello world,并尝试用它编译它 \ $ WIN_KITS \ include \ shared \; $ WIN_KITS \ include \ um; \ $ WIN_KITS \ include \ winrt \; $ WIN_KITS \ include \ um \ gl#在路径导出中放入nsis,c编译器和java PATH = $ VCPATH:$ PATH:$ JAVA_BIN:$ NSIS_BIN#确保LIB和INCLUDE可用于其他导出LIBPATH LIB INCLUDEM一定要设置PATH,以便在MSYS / Cygwin工具之前找到NSIS和Microsoft SDK,并且Java在PATH中最后一个。创建一个简单的hello world,并尝试用它编译它 \ $ WIN_KITS \ include \ shared \; $ WIN_KITS \ include \ um; \ $ WIN_KITS \ include \ winrt \; $ WIN_KITS \ include \ um \ gl#在路径导出中放入nsis,c编译器和java PATH = $ VCPATH:$ PATH:$ JAVA_BIN:$ NSIS_BIN#确保LIB和INCLUDE可用于其他导出LIBPATH LIB INCLUDEM一定要设置PATH,以便在MSYS / Cygwin工具之前找到NSIS和Microsoft SDK,并且Java在PATH中最后一个。创建一个简单的hello world,并尝试用它编译它cl来自bash内的命令。如果这不起作用,您的环境需要修复。请记住,Cygwin bash中的路径环境变量中不应该有反斜杠,但LIB和INCLUDE应包含带分号,驱动器号和反斜杠的Windows样式路径。
  • Sun的Java JDK 1.6.0或更高版本。我们的Java代码(jinterface,ic)是为JDK 1.6.0编写的。获取它的Windows并安装它,JRE是不够的。如果你不关心Java,你可以跳过这一步。结果将是jinterface没有建立。URL:在bash中将http://java.sun.com javac LAST添加到您的路径环境中,在我的情况下,这意味着: PATH="$PATH:/cygdrive/c/Program Files/Java/jdk1.7.0\_02/bin" 不需要CLASSPATH或任何东西。键入javac在bash提示符下,你应该得到可用的Java选项的列表。确保,例如通过输入type java,使用您安装的Java。但请注意使用Cygwin's / MinGW's / MSYS2's jar.exe。这就是为什么JDK bin目录应该被添加到最后PATH
  • Nullsoft NSIS安装程序系统。您需要这个来构建自我安装包。这是一个免费的开源安装程序,比商业智能和安装屏蔽安装程序更好用。这是我们用于商业发布的安装程序。URL:http://nsis.sourceforge.net/download 安装地段,特别是现代用户界面组件,因为它绝对需要。放入makensis你的路径,在我的情况:PATH = / cygdrive / c / Program \ Files / NSIS:$ PATH在bash提示符下输入makensis,如果一切正常,你应该得到一个选项列表。
  • OpenSSL的。这是如果你想SSL和加密应用程序编译(和运行)。有预构建的二进制文件,你可以在这里下载和安装:URL:http://openssl.org/community/binaries.html 我们建议使用1.0.2d。
  • 用wxWidgets构建。下载wxWidgets-3.0.3或更高版本。安装或解压缩到pgm文件夹:Cygwin:DRIVE:/PATH/cygwin/opt/local/pgmMSYS:DRIVE:/PATH/MinGW/msys/1.0/opt/local/pgmMSYS2:DRIVE:/PATH/msys<32/64>/opt/local/pgm 如果wxUSE_POSTSCRIPT未启用<path\to\pgm>\wxMSW-3.0.3\include\wx\msw\setup.h,启用它。build:从命令提示符下使用可用的VC工具(请参阅上面关于OpenSSL构建的说明,帮助您在RELEASE模式下启动适当的命令提示符):C:...> cd <path \ to \ pgm> \ wxMSW-3.0 .3 \ build \ msw C:...> nmake BUILD = release SHARED = 0 DIR_SUFFIX_CPU = -f makefile.vc或者 - 如果构建64位版本:C:...> cd <path \ to \ pgm> \ wxMSW -3.0.3 \ build \ msw C:...> nmake TARGET_CPU = amd64 BUILD = release SHARED = 0 DIR_SUFFIX_CPU = -f makefile.vc
  • 获取Erlang源码分发(从http://www.erlang.org/download.html)。与Unix平台相同。最好使用Cygwin,MSYS或MSYS2中的tar来解压源tar.gz(tar zxf otp_src_20.tar.gz)。将环境设置ERL_TOP为指向源分配的根目录。比方说,我站在$HOME/src并解压缩otp_src_20.tar.gz,然后添加以下内容.profile:ERL_TOP = $ HOME / src / otp_src_20 export $ ERL_TOP

4.5Shell环境

所以,如果你按照上面的说明,当你启动一个bash shell的时候,你应该有一个包含Windows风格路径的INCLUDE环境,一个LIB环境变量也是Windows风格的,最后是一个PATH,让你可以达到cl,makensis, javac等从命令提示符(使用which cl等从bash验证)。

您还应该有一个Cygwin风格ERL_TOP环境变量,并指向包含脚本的其他文件otp_build的目录。

需要对环境进行最后的按摩,这是由脚本完成的$ERL_TOP/otp_build。开始bash并执行以下操作,注意“back-ticks”(`),在某些键盘上可能很难找到,但按空格键后按空格键可能会做到这一点......

$ cd $ERL_TOP
$ eval `./otp_build env_win32`

如果您无法在键盘上制作反标,可以使用ksh变体:

$ cd $ERL_TOP
$ eval $(./otp_build env_win32)

如果您正在构建64位版本,则需要提供otp_build一个体系结构参数:

$ cd $ERL_TOP
$ eval `./otp_build env_win32 x64`

这应该会对环境产生最后的影响,并且在此之后建筑物应该很容易。你可以运行./otp_build env_win32而不eval只是看看它做了什么,并看到它设置的环境似乎没问题。如果可能的话(使用DOS风格的短名称代替)的路径被清除的空间,变量OVERRIDE_TARGETCCCXXARRANLIB被设置为各自的包装和目录$ERL_TOP/erts/etc/win32/<cygwin/msys>_tools/vc,并$ERL_TOP/erts/etc/win32/<cygwin/msys>_tool在PATH中先加入。

现在你可以通过type erlc在你的shell中写入来检查你有哪些erlc 。它应该驻留在$ERL_TOP/erts/etc/win32/cygwin_tools$ERL_TOP/erts/etc/win32/msys_tools

4.6建立和安装

建筑使用otp_build脚本最简单:

$ ./otp_build autoconf # Ignore the warning blob about versions of autoconf
$ ./otp_build configure <optional configure options>
$ ./otp_build boot -a
$ ./otp_build release -a <installation directory>
$ ./otp_build installer_win32 <installation directory> # optional

现在你将有一个文件叫otp_win32_20.exeotp_win64_20.exe<installation directory>,即$ERL_TOP/release/win32

让我们进入更多的细节:

  • $ ./otp_build autoconf - 此步骤重新构建配置脚本以在您的环境中正常工作。在一个理想的世界中,这不是必需的,但可惜的是,多年来我们的分布式配置脚本(在Linux平台上生成)与Cygwin / MSYS / MSYS2环境之间遇到了几个不兼容的问题。在Cygwin / MSYS / MSYS2中运行autoconf可确保以兼容的方式生成配置脚本,并在下一步中运行良好。
  • $ ./otp_build configure - 这将运行新生成的配置脚本,其中的选项使配置运行良好。目标机器的类型很简单win32,所以很多配置脚本都会识别这个笨拙的目标名称并相应地运行。CC变量也使编译器成为cc.sh包装MSVC ++ 的编译器,因此所有关于C编译器的配置测试都可以运行正确的编译器。Windows上不需要很多测试,但我们认为最好是运行整个配置。
  • $ ./otp_build boot -a- 它使用bootstrap目录(与源一起提供$ERL_TOP/bootstrap)构建完整的OTP系统。完成此操作后,可以从源代码树中运行erl; 只需键入$ERL_TOP/bin/erl,你就会有提示。
  • $ ./otp_build release -a - 从源码树构建商业版本树。默认是放入$ERL_TOP/release/win32。你可以给任何目录作为参数(Cygwin风格),但是如果你打算构建一个自解压安装程序也没关系。
  • $ ./otp_build installer_win32 - 创建自解压安装程序可执行文件。可执行文件otp_win32_20.exeotp_win64_20.exe将被放置在上一步创建的版本的顶层目录中。如果没有指定发布目录,则预计该发布版本已经构建$ERL_TOP/release/win32,这也将是安装程序可执行文件的放置位置。如果您为发行版(ie ./otp_build release -a /tmp/erl_release)指定了其他目录,则需要在此给出相同的参数(即./otp_build installer_win32 /tmp/erl_release)。你需要有一个完整的NSIS安装和makensis.exe在你的这条路上工作。一旦你创建了安装程序,你可以运行它来以常规方式安装Erlang / OTP,只需运行可执行文件并按照安装向导中的步骤操作即可。要在安装中没有任何问题地获得所有默认设置,可以使用参数/S(大写S)运行可执行文件,如下所示:$ cd $ ERL_TOP $ release / win32 / otp_win32_20 / S ...或$ cd $ ERL_TOP $ release / win32 / otp_win64_20 / S ...一段时间后Erlang / OTP-20将被安装在C:\Program Files\erl9.1\菜单中的快捷方式等。

4.7发展

系统建成后,您可能需要更改它。在一些不错的目录中有一个测试版本可能会很有用,但你也可以在源码树中运行Erlang。目标local_setup,使程序$ERL_TOP/bin/erl.exe可用,它也使用源树中的所有OTP库。

如果你破解了这个模拟器,你可以通过站起$ERL_TOP/erts/emulator来做一个简单的构建模拟器可执行文件

$ make opt

请注意,(cd $ERL_TOP && eval `./otp_build env_win32`)在Windows上构建任何内容之前,您需要在特定的shell中运行。做完选择后,您可以通过运行测试您的结果$ERL_TOP/bin/erl。如果你想将结果复制到释放目录(比如说/tmp/erl_release),你可以这样做(仍在$ERL_TOP/erts/emulator

$ make TESTROOT=/tmp/erl_release release

这将复制模拟器可执行文件。

要进行仿真器的调试构建,您需要重新编译beam.dll(实际运行时系统)和erlexec.dll。这样做

$ cd $ERL_TOP
$ rm bin/win32/erlexec.dll
$ cd erts/emulator
$ make debug
$ cd ../etc
$ make debug

有时

$ cd $ERL_TOP
$ make local_setup

所以,现在当你运行时$ERL_TOP/erl.exe,你应该有一个调试编译模拟器,你会看到如果你做一个:

1> erlang:system_info(system_version).

在erlang shell中。如果返回的字符串包含[debug],你有一个调试编译模拟器。

要破解erlang库,只需make opt在特定的“应用程序”目录中执行一下,如:

$ cd $ERL_TOP/lib/stdlib
$ make opt

甚至在源目录中...

$ cd $ERL_TOP/lib/stdlib/src
$ make opt

请注意,当你这样做时,你需要在你的路上有一个新的Erlang,最好是你在前面的步骤中建立的普通20。在重建特定库之前$ERL_TOP/bootstrap/bin,您还可以添加到您的PATH。这会给你一个足够好的Erlang系统来编译任何OTP erlang代码。正确设置路径有点棘手。你还需要有$ERL_TOP/erts/etc/win32/cygwin_tools/vc$ERL_TOP/erts/etc/win32/cygwin_tools 之前的路径实际模拟器。使用引导编译器的路径的典型设置是:

$ export PATH=$ERL_TOP/erts/etc/win32/cygwin_tools/vc\
:$ERL_TOP/erts/etc/win32/cygwin_tools:$ERL_TOP/bootstrap/bin:$PATH

这应该可以重建任何库而没有麻烦...

如果您想将新建的库(应用程序)复制到发布区,则您喜欢使用模拟器:

$ cd $ERL_TOP/lib/stdlib
$ make TESTROOT=/tmp/erlang_release release

请记住:

  • 特定于Windows的C代码进入$ERL_TOP/erts/emulator/sys/win32$ERL_TOP/erts/emulator/drivers/win32$ERL_TOP/erts/etc/win32
  • 应该有条件地使用Windows特定的erlang代码,并在运行时测试主机操作系统,为每个平台分配完全相同的波束文件!所以编写如下代码:case {os:type(){win32,_} - > do_windows_specific(); 其他 - > do_fallback_or_exit()结束,

这基本上就是你需要的一切。

4.8使用GIT

您可能想要查看GitHUB的源代码版本。这可以直接在Cygwin中进行,但不能在MSYS中进行。有一个项目MsysGIT:

URL:http://code.google.com/p/msysgit/

这是一个不错的Git端口。从MsysGIT获得的msys提示符与MinGW的完整版本不兼容,因此您需要使用MsysGIT的命令提示符检出文件,然后切换到用于构建的常见MSYS命令提示符。由于MsysGIT / MSYS不处理符号链接,所以也不能构建所有测试套件。

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1