4.如何在Windows上构建Erlang / OTP | 4. How to Build Erlang/OTP on Windows
4如何在Windows上构建Erlang / OTP
目录
Introduction
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)即可。
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 -d
并mkgroup -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。
为了能够构建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
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_TARGET,CC,CXX,AR和RANLIB被设置为各自的包装和目录$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.exe或otp_win64_20.exe在<installation directory>,即$ERL_TOP/release/win32。
让我们进入更多的细节:
$ ./otp_build autoconf
- 此步骤重新构建配置脚本以在您的环境中正常工作。在一个理想的世界中,这不是必需的,但可惜的是,多年来我们的分布式配置脚本(在Linux平台上生成)与Cygwin / MSYS / MSYS2环境之间遇到了几个不兼容的问题。在Cygwin / MSYS / MSYS2中运行autoconf可确保以兼容的方式生成配置脚本,并在下一步中运行良好。
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
。
这基本上就是你需要的一切。
4.8使用GIT
您可能想要查看GitHUB的源代码版本。这可以直接在Cygwin中进行,但不能在MSYS中进行。有一个项目MsysGIT:
URL:http://code.google.com/p/msysgit/
这是一个不错的Git端口。从MsysGIT获得的msys提示符与MinGW的完整版本不兼容,因此您需要使用MsysGIT的命令提示符检出文件,然后切换到用于构建的常见MSYS命令提示符。由于MsysGIT / MSYS不处理符号链接,所以也不能构建所有测试套件。