2.构建和安装Erlang / OTP | 2. Building and Installing Erlang/OTP
2.1简介
本文档介绍如何构建和安装Erlang/OTP-20。Erlang/OTP应该可以在任何Unix/Linux系统(包括OS X)上从源代码构建。建议您在尝试构建和安装Erlang/OTP之前阅读整个文档。
源代码可以从Erlang/OTP或GitHub的官方站点下载。
2.2所需的实用程序
这些是您需要解包并构建Erlang/OTP的工具。
警告
请在Known platform issues
开始之前查看该章节。
开箱
- GNU解压缩,或现代解压缩。
- 一个TAR程序,可以理解长文件名的GNU TAR格式。
建造
- GNU
make
- 编译器 - GNU C编译器,
gcc
或LLVM的C编译器前端clang
。 - Perl 5
- GNU
m4
- 如果启用HiPE(本地代码)支持。HiPE可以使用禁用--disable-hipe
ncurses
,termcap
或者termlib
- 需要开发头文件和库,通常称为ncurses-devel
。使用--without-termcap
以建立一个没有任何这些库。请注意,在这种情况下,只能使用旧的外壳(不需要任何行编辑)。sed
- 用于基本文本转换的流编辑器。
Building in Git
autoconf
至少版本2.59的GNU 。请注意,autoconf
构建发布源的未修改版本时不需要。
Building on OS X
- Xcode - 通过Mac App Store下载并安装。
Building on a Mac
在继续之前阅读。
安装
- 一个
install
可以取多个文件名的程序。
2.3可选实用程序
如果不满足依赖关系,某些应用程序会自动跳过。以下是这些应用程序所需的实用程序列表。您还可以找到构建文档所需的实用程序。
Building
- OpenSSL - 用于安全套接字层和传输层安全性的开源工具包。构建应用程序所需
crypto
。此外,ssl
还ssh
需要一个可用的加密应用程序,并且如果缺少OpenSSL,它也将被跳过。该public_key
应用程序没有crypto
,但功能将非常有限。需要包含头文件的OpenSSL开发包以及二进制命令程序openssl
。至少需要OpenSSL 0.9.8版本。阅读更多并从中下载http://www.openssl.org
。 - Oracle Java SE JDK - Java开发工具包(标准版)。需要构建应用程序
jinterface
的部分地区ic
和orber
。JDK至少需要1.6.0版本。从下载http://www.oracle.com/technetwork/java/javase/downloads
。我们还使用IBM的JDK 1.6.0进行了测试。 - X Windows -
gs
在Unix / Linux上构建Erlang / OTP应用程序需要开发头文件和库。 flex
- 需要头文件和库来为megaco
Unix / Linux上的应用程序构建Flex扫描程序。- wxWidgets - 用于GUI应用程序的工具包。构建
wx
应用程序所需。wxWidgets至少需要3.0版本。http://sourceforge.net/projects/wxwindows/files/3.0.0/
从GitHub 下载或获取它:https://github.com/wxWidgets/wxWidgets
关于wxWidgets的进一步说明,请阅读Building with wxErlang
。
构建文档
xsltproc
- 一个命令行XSLT处理器。将XSLT样式表应用于XML文档的工具。从下载xsltprochttp://xmlsoft.org/XSLT/xsltproc2.html
。fop
- Apache FOP打印格式化程序(需要Java)。可以从下载http://xmlgraphics.apache.org/fop
。
2.4如何构建和安装Erlang/OTP
以下说明适用于建筑物the released source tar ball
。
这个变量$ERL_TOP
会被提及很多次。它指向源树中的顶层目录。有关更多信息$ERL_TOP
,请参阅make and $ERL_TOP
下面的部分。如果你在git中建立,你可能想Building in Git
在继续之前看看下面的部分。
Unpacking
首先用GNU兼容的TAR程序解压Erlang/OTP分发文件。
$ tar -zxf otp_src_20.1.tar.gz # Assuming bash/sh
现在将目录切换到基本目录并设置$ERL_TOP
变量。
$ cd otp_src_20.1
$ export ERL_TOP=`pwd` # Assuming bash/sh
配置
运行以下命令来配置构建:
$ ./configure [ options ]
注意
如果您从git构建Erlang/OTP,则需要运行./otp_build autoconf
以生成配置脚本。
默认情况下,Erlang/OTP版本将安装在/usr/local/{bin,lib/erlang}
。如果您没有在标准位置安装的权限,则可以在其他位置安装Erlang/OTP。例如,要安装/opt/erlang/20.1/{bin,lib/erlang}
,请使用--prefix=/opt/erlang/20.1
选项。
在某些平台上,如果设置了某些语言环境,Perl可能会表现得很奇怪。如果您在构建时遇到错误,请尝试设置LANG变量:
$ export LANG=C # Assuming bash/sh
构建
构建Erlang/OTP版本。
$ make
测试
在安装之前,您应该通过运行烟雾测试来测试您的版本是否正常工作。烟雾测试是完整的Erlang/OTP测试套件的一个子集。首先,您需要构建并发布测试套件。
$ make release_tests
这将创建一个额外的文件夹中$ERL_TOP/release
叫tests
。现在该开始抽烟测试了。
$ cd release/tests/test_server
$ $ERL_TOP/bin/erl -s ts install -s ts smoke_test batch -s init stop
要确认一切正常,应$ERL_TOP/release/tests/test_server/index.html
在Web浏览器中打开并确保没有失败的测试用例。
注意
在没有建立crypto
,ssl
并且ssh
有一个失败的测试用例未定义功能。验证失败的测试用例日志只显示对跳过的应用程序的调用。
安装
您现在已准备好安装Erlang/OTP版本!以下命令将在您的系统上安装该版本。
$ make install
运行
你现在应该有一个Erlang/OTP的工作版本!跳转到System Principles
有关运行Erlang/OTP的说明。
如何构建文档
确保您位于源代码树的顶部目录中。
$ cd $ERL_TOP
如果您刚刚在当前源代码树中构建了Erlang/OTP,那么您已经运行了configure
,不需要再次执行此操作;否则,运行configure
。
$ ./configure [Configure Args]
在构建文档时,您需要完整的Erlang/OTP-20.1系统$PATH
。
$ export PATH=$ERL_TOP/bin:$PATH # Assuming bash/sh
对于FOP打印格式化程序,必须采取两个步骤:
- 将您的安装位置
fop
在$FOP_HOME
。$ export FOP_HOME = / path / to / fop / dir#假设bash / sh - 添加
fop
脚本(中$FOP_HOME
)到你的$PATH
,通过添加$FOP_HOME
到$PATH
,或通过复制fop
在你已经脚本到一个目录$PATH
。
构建文档。
$ make docs
构建问题
我们有时会遇到Oracle java
运行时内存不足的问题fop
。在我们的例子中,增加可用内存的数量已经解决了这个问题。
$ export FOP_OPTS="-Xmx<Installed amount of RAM in MB>m"
更多信息可以在网上找到
如何安装文档
可以使用install-docs
目标或使用release_docs
目标来安装文档。
- 如果您使用
install
目标安装了Erlang/OTP ,请使用目标安装文档install-docs
。configure
将使用确定的安装位置。$DESTDIR
可以以与做时相同的方式使用make install
。$ make install-docs - 如果您使用
release
目标安装了Erlang/OTP ,请使用目标安装文档release_docs
。您通常希望RELEASE_ROOT
在调用时使用相同的内容make release
。$ make release_docs RELEASE_ROOT = <释放目录>
访问文档
安装后,您可以通过访问文档
- 阅读手册页。确保指的
erl
是已安装的版本。例如/usr/local/bin/erl
。尝试查看Mnesia $ erl -man mnesia的手册页 - 通过加载页面
/usr/local/lib/erlang/doc/erlang/index.html
或<BaseDir>/lib/erlang/doc/erlang/index.html
前缀选项已被使用浏览html页面。
如何安装预格式化的文档
预格式化html documentation
并man pages
可以从中下载
解压缩安装目录中的html存档。
$ cd <ReleaseDir>
$ tar -zxf otp_html_20.1.tar.gz
为了erl -man <page>
工作,Unix手册页必须以相同的方式安装,即
$ cd <ReleaseDir>
$ tar -zxf otp_man_20.1.tar.gz
当<ReleaseDir>
是
<PrefixDir>/lib/erlang
如果你已经安装了Erlang / OTPmake install
。$DESTDIR<PrefixDir>/lib/erlang
如果你已经安装了Erlang / OTPmake install DESTDIR=<TmpInstallDir>
。RELEASE_ROOT
如果你已经安装使用make release RELEASE_ROOT=<ReleaseDir>
。
2.5高级配置和Erlang/OTP构建
如果您想要量身定制您的Erlang/OTP构建和安装,请阅读有关各个步骤的详细信息。
make and $ERL_TOP
整个目录树中的所有makefile都使用环境变量ERL_TOP
来查找安装的绝对路径。该configure
脚本将解决这个问题并将其设置在顶层Makefile中(在构建时它将传递)。但是,在开发时,有时可以方便地在子目录中运行make。为此,您必须ERL_TOP
在运行make之前设置变量。
例如,假设你的GNU make程序被调用make
,你想重建应用程序STDLIB
,那么你可以这样做:
$ cd lib/stdlib; env ERL_TOP=<Dir> make
哪里<Dir>
会是你发现了什么ERL_TOP
在顶层Makefile文件设置为。
otp_build vs configure/make
建筑二郎山/ OTP既可以做,通过使用$ERL_TOP/otp_build
脚本,或通过调用$ERL_TOP/configure
和make
直接。构建使用otp_build
更容易,因为它涉及更少的步骤,但otp_build
构建过程不如configure
/ make
build过程那么灵活。我们提供的Windows二进制版本是使用构建的otp_build
。
配置
配置脚本由GNU autoconf实用程序创建,该实用程序检查系统特定的功能,然后创建许多makefile。
配置脚本允许您自定义一些参数; 类型./configure --help
或./configure --help=recursive
细节。./configure --help=recursive
将为configure
所有应用程序中的所有脚本提供帮助。
你可以指定的一个地方是应该安装Erlang / OTP的地方。默认情况下Erlang / OTP将安装在中/usr/local/{bin,lib/erlang}
。为了保持相同的结构,但安装在不同的地方,<Dir>
比如说,使用这样的--prefix
参数:./configure --prefix=<Dir>
。
一些可用的configure
选项是:
--prefix=PATH
- 指定安装前缀。--enable-plain-emulator
- 构建一个只使用一个调度程序的线程模拟器。此仿真器类型已被弃用,并将在未来的版本中删除。--disable-threads
- 构建一个非线程模拟器。此仿真器类型已被弃用,并将在未来的版本中删除。--{enable,disable}-kernel-poll
- 内核轮询支持(如果可能,默认启用)--{enable,disable}-hipe
- HiPE支持(在支持的平台上默认启用)--{enable,disable}-fp-exceptions
- 浮点异常(对浮点操作的优化)。默认值因操作系统和硬件平台而异。请注意,通过启用此功能,您可能会看到一个看起来有效的系统,有时会在浮点运算上失败。--enable-m64-build
- 使用-m64
标志来构建64位二进制文件(g)cc
--enable-m32-build
- 使用-m32
标志来构建32位二进制文件(g)cc
--with-assumed-cache-line-size=SIZE
- 以字节为单位设定假定的高速缓存行大小。缺省值是64.有效值是介于16和8192之间的两个幂。运行时系统使用此值以避免错误共享。太大的值会浪费内存。A值小会增加虚假分享的数量。--{with,without}-termcap
- termcap(没有暗示只能使用旧的Erlang shell)--with-javac=JAVAC
- 指定要使用的Java编译器--{with,without}-javac
- Java编译器(没有暗示jinterface
应用程序不会被构建)--{enable,disable}-dynamic-ssl-lib
- 动态OpenSSL库--{enable,disable}-builtin-zlib
- 使用zlib的内置源。--{with,without}-ssl
- OpenSSL的(不意味着crypto
,ssh
和ssl
不会待建)--with-ssl=PATH
- 指定OpenSSL include和lib的位置--with-ssl-incl=PATH
- OpenSSLinclude
目录的位置,如果与指定的不同--with-ssl=PATH
--with-ssl-rpath=yes|no|PATHS
- OpenSSL的运行时库路径。默认值是yes
,这相当于一些标准位置。如果no
,那么将不会使用运行时库路径。其他任何东西都应该是逗号分隔的路径列表。--with-libatomic_ops=PATH
- 使用该libatomic_ops
库进行原子内存访问。如果configure
应该通知您关于没有可用的本地原子实现,您通常要尝试使用该libatomic_ops
库。它可以从下载https://github.com/ivmai/libatomic_ops/
。--disable-smp-require-native-atomics
-configure
如果要构建SMP运行时系统,缺省情况下会失败,并且不能找到用于本机原子内存访问的实现。如果发生这种情况,我们鼓励您找到可以使用的本地原子实现,例如使用libatomic_ops
,但通过传递,--disable-smp-require-native-atomics
您可以使用基于互斥锁或螺旋锁的后备实现来构建。但是,SMP运行时系统的性能将会极大地受到本地原子内存访问的实施。--enable-static-{nifs,drivers}
- 为了允许在不支持动态链接库的操作系统上使用nifs和驱动程序,可以将nifs和驱动程序与主要的Erlang VM二进制文件进行静态链接。这是通过将逗号分隔的列表传递到要静态链接的档案来完成的。例如--enable-static-nifs=/home/$USER/my_nif.a
。路径必须是绝对的,档案的名称必须与模块相同,即my_nif
在上面的示例中。这对于驱动程序也是如此,但是它的驱动程序名称必须与文件名相同。您还必须STATIC_ERLANG_{NIF,DRIVER}
在编译nif /驱动程序的.o文件时进行定义。如果您的nif /驱动程序依赖于其他动态库,您现在必须将其链接到Erlang VM二进制文件。这很容易通过LIBS=-llibname
配置来实现。--without-$app
- 默认情况下,Erlang / OTP中的所有应用程序都将包含在发行版中。如果不需要,可以指定Erlang / OTP应该在没有一个或多个应用程序的情况下编译,即--without-wx
。应用程序之间没有自动的依赖关系处理。如果禁用另一个应用程序依赖的应用程序,则还必须禁用从属应用程序。--enable-gettimeofday-as-os-system-time
- 强制使用gettimeofday()
OS系统时间。--enable-prefer-elapsed-monotonic-time-during-suspend
- 在暂停期间优先使用OS单调时间源。--disable-prefer-elapsed-monotonic-time-during-suspend
- 在暂停期间不要使用经过时间的OS单调时间源。--with-clock-resolution=high|low
- 尽量找到操作系统系统时间的时钟源,以及分辨率高于或低于默认选择的操作系统单调时间。请注意,与选择的默认时钟源相比,这两种方案都可能会对性能和可扩展性产生负面影响。--disable-saved-compile-time
- 禁用在仿真器二进制文件中保存编译日期和时间。--enable-dirty-schedulers
- 启用实验性脏排程器功能。请注意,肮脏的调度程序功能是实验性的,不受支持。此功能将受到向后不兼容的更改的影响。请注意,您应该不启用生产系统脏调度功能。它仅用于测试。
如果您或您的系统有特殊要求,请阅读Makefile
其他配置信息。
原子内存操作和虚拟机
具有SMP支持的虚拟机对原子内存操作进行了相当多的使用。提供本地原子内存操作的实现因此在构建Erlang / OTP时非常重要。默认情况下,如果本机原子内存操作不可用,虚拟机将拒绝构建。
Erlang / OTP本身提供本地原子内存操作的实现,可以在使用gcc
32/64位x86,32/64位SPARC V9,32位PowerPC或32位Tile 的兼容编译器进行编译时使用。当使用gcc
兼容编译器编译其他体系结构时,VM可能能够使用__atomic_*
内建的本机原子操作(可能在使用gcc
至少4.7版本时可用)和/或使用__sync_*
内置函数(可能在使用一个gcc
至少4.1版本)。如果只有gcc
的__sync_*
内置的可用,性能将受到影响。这种配置只能用作最后的手段。在Windows上使用MicroSoft Visual C ++编译器进行编译时,Windows API提供本机原子内存操作。
本地原子执行顺序首选:
- Erlang / OTP提供的实现。
- Windows提供的API。
- 基于
gcc
__atomic_*
内置的实现。 - 如果以上都不适用于您的体系结构/编译器,建议
libatomic_ops
在构建Erlang / OTP之前进行构建和安装。该libatomic_ops
库为各种体系结构和编译器提供本地原子内存操作。在构建Erlang / OTP时,您需要libatomic_ops
使用--with-libatomic_ops=PATH
configure
交换机将构建库的位置通知构建系统。 - 作为最后的手段,执行完全基于
gcc
__sync_*
builtins。然而,这会导致发出大量昂贵且不必要的内存屏障指令。也就是说,表现会受到影响。该configure
脚本将发出警告,在其执行结束时,如果它不能找到任何比这其他的选择。
建造
在相对较快的计算机上构建Erlang / OTP大约需要5分钟。为了加快速度,您可以使用-j<num_jobs>
选项并行制作。
$ export MAKEFLAGS=-j8 # Assuming bash/sh
$ make
如果您已使用补丁升级源代码,则可能需要在新版本之前从之前的版本中清除。Pre-built Source Release
做一个之前请务必阅读下面的部分make clean
。
在Git中
在Git工作目录中构建时,autoconf
您的系统上必须具有至少2.59版本的GNU ,因为configure
在开始构建之前需要生成脚本。
configure
脚本通过调用生成./otp_build autoconf
的$ERL_TOP
目录。configure
当文件configure.in
或aclocal.m4
文件被修改时,脚本也必须重新生成。请注意,在检出分支时configure.in
,aclocal.m4
文件或文件可能会更改内容,因此configure
在检出分支时可能必须重新生成脚本。重新生成的configure
脚本意味着您必须重新运行configure
并重新构建。
注意
运行./otp_build autoconf
是不是建筑释放源的未修改的版本时需要。
其他有用的信息可以在我们的GitHub wiki中找到:
OS X (Darwin)
确保该命令hostname
返回一个有效的完全限定主机名(在此配置/etc/hostconfig
)。否则,运行分布式系统时可能会遇到问题。
如果你开发链接驱动程序(共享库),你需要链接使用gcc
和标志-bundle -flat_namespace -undefined suppress
。您还包括-fno-common
在CFLAGS
编译时。使用.so
的库后缀。
如果您有Xcode 4.3或更高版本,则还需要通过Xcode中的下载首选项窗格下载“命令行工具”。
用wxErlang构建
如果你想构建wx
应用程序,你将需要获得wxWidgets-3.0(wxWidgets-3.0.0.tar.bz2
from http://sourceforge.net/projects/wxwindows/files/3.0.0/
)或者从github获得bug修复:
$ git clone --branch WX_3_0_BRANCH git@github.com:wxWidgets/wxWidgets.git
请注意,wxWidgets-3.0是wxWidgets的新版本,并不像旧版本那么成熟,OS X端口仍然落后于其他端口。
配置和构建wxWidgets(在Mavericks - 10.9上):
$ ./configure --with-cocoa --prefix=/usr/local
or without support for old versions and with static libs
$ ./configure --with-cocoa --prefix=/usr/local --with-macosx-version-min=10.9 --disable-shared
$ make
$ sudo make install
$ export PATH=/usr/local/bin:$PATH
检查你是否得到了正确的wx-config
$ which wx-config && wx-config --version-full
构建Erlang / OTP
$ export PATH=/usr/local/bin:$PATH
$ cd $ERL_TOP
$ ./configure
$ make
$ sudo make install
预建源码版本
源代码发布提供了许多独立于平台的构建结果,这些结果已经预先构建完成。如果你想删除这些预建的文件,./otp_build remove_prebuilt_files
从$ERL_TOP
目录调用。完成这些之后,您可以像以前一样构建,但构建过程需要更长的时间。
警告
这样make clean
在源树的任意目录中,可能会删除需要提供引导构建文件。
这样./otp_build save_bootstrap
从$ERL_TOP
做之前目录make clean
将确保将有可能这样做之后建立make clean
。./otp_build save_bootstrap
当将被自动调用make
从调用$ERL_TOP
与任一所述clean
目标,或默认目标。如果./otp_build remove_prebuilt_files
被调用,它也会自动调用。
如果您需要验证引导波束文件与提供的源文件匹配,请使用./otp_build update_primary
创建一个包含差异(如果存在)的新提交。
如何构建一个启用调试的Erlang RunTime系统
完成上述所有常规构建步骤后,便可构建启用调试的运行时系统。要做到这一点,你必须改变目录$ERL_TOP/erts/emulator
。
在这个目录中执行:
$ make debug FLAVOR=$FLAVOR
哪里$FLAVOR
是plain
或者smp
。flavor选项将分别产生一个beam.debug和beam.smp.debug可执行文件。这些文件连同普通(OPT)版本安装侧面beam.smp
和beam
。
要启动启用调试的运行时系统,请执行:
$ $ERL_TOP/bin/cerl -debug
启用调试的运行时系统具有锁定违规检查,断言检查和各种健全性检查,以帮助开发人员确保正确性。其中一些功能可以使用适当的配置选项在普通光束上启用。
还有其他类型的运行时系统也可以使用刚刚描述的类似步骤来构建。
$ make $TYPE FLAVOR=$FLAVOR
其中$TYPE
是opt
,gcov
,gprof
,debug
,valgrind
,或lcnt
。这些不同的光束类型对调试和分析目的很有用。
安装
- 分阶段安装使用
DESTDIR
。您可以在临时目录中执行安装阶段,然后通过使用DESTDIR
变量将安装移动到正确的位置:$ make DESTDIR = <tmp install dir> install安装将在前缀为的位置创建$DESTDIR
。但是,它不能从那里运行。它需要在可以运行之前移入正确的位置。如果DESTDIR
尚未设置但INSTALL_PREFIX
已设置,DESTDIR
则会设置为INSTALL_PREFIX
。请注意,INSTALL_PREFIX
在R13B04之前是有问题的,表现如下EXTRA_PREFIX
(见下文)。安装过程有很多使用领域DESTDIR
,例如,在创建包,交叉编译等时使用。下面是安装应位于下面的示例/opt/local
:$ ./configure --prefix = / opt / local $ make $ make DESTDIR = / tmp / erlang-build install $ cd / tmp / erlang-build / opt / local $#本例中使用gnu-tar $ tar -zcf /home/me/my-erlang-build.tgz * $ su - 密码:***** $ cd / opt / local $ tar -zxf /home/me/my-erlang-build.tgz - 使用
release
目标安装。而不是做make install
你可以创建任何目录,你喜欢用的安装release
目标,并运行Install
自己的脚本。RELEASE_ROOT
用于指定安装应该创建的目录。/usr/local/lib/erlang
如果您使用安装,这是默认情况下的结果make install
。在提供的所有安装路径configure
阶段被忽略,以及DESTDIR
和INSTALL_PREFIX
。如果你想要从特定bin
目录到安装的链接,你必须自己设置它们。一个Erlang / OTP应该位于的例子/home/me/OTP
:$ ./configure $ make $ make RELEASE_ROOT = / home / me / OTP release $ cd / home / me / OTP $ ./Install -minimal / home / me / OTP $ mkdir -p / home / me / bin $ cd / home / me / bin $ ln -s / home / me / OTP / bin / erl erl $ ln -s / home / me / OTP / bin / erlc erlc $ ln -s / home / me / OTP / bin / escript escript ...Install
脚本当前应在其所在的目录(顶层目录)中按如下方式调用:$ ./Install -cross <ERL_ROOT>其中:
- `-minimal` Creates an installation that starts up a minimal amount of applications, i.e., only `kernel` and `stdlib` are started. The minimal system is normally enough, and is what `make install` uses.
- `-sasl` Creates an installation that also starts up the `sasl` application.
- `-cross` For cross compilation. Informs the install script that it is run on the build machine.
- `<ERL_ROOT>` - The absolute path to the Erlang installation to use at run time. This is often the same as the current working directory, but does not have to be. It can follow any other path through the file system to the same directory.
如果两者都不是-minimal
,也不会-sasl
作为参数传递,您将被提示。
- 测试安装使用
EXTRA_PREFIX
。在执行时,EXTRA_PREFIX
变量的内容将作为所有安装路径的前缀make install
。需要注意的是EXTRA_PREFIX
类似DESTDIR
的,但它并没有具有相同的效果DESTDIR
。安装程序可以并且必须从指定的位置运行EXTRA_PREFIX
。也就是说,如果你想在不进行真正的安装之前尝试系统,运行测试套件等,它会很有用EXTRA_PREFIX
。
--bindir中的符号链接
在执行make install
和使用默认安装前缀时,相对符号链接将从/usr/local/bin
所有公开的Erlang / OTP可执行文件中创建/usr/local/lib/erlang/bin
。只要安装阶段将尝试创建相对符号链接,--bindir
并且位于其下的Erlang bin目录--libdir
都具有--exec-prefix
前缀。当--exec-prefix
默认--prefix
。--prefix
,--exec-prefix
,--bindir
,并且--libdir
是可以传递给所有的参数configure
。可以通过在安装阶段传递BINDIR_SYMLINKS=relative|absolute
参数来强制相对或绝对链接make
。请注意,如果请求不能得到满足,这样的请求可能会导致失败。
运行中
使用HiPE
HiPE支持以下系统配置:
- x86:所有32位和64位模式处理器都应该可以工作。
- Linux: Fedora Core is supported. Both 32-bit and 64-bit modes are supported. NPTL glibc is strongly preferred, or a LinuxThreads glibc configured for "floating stacks". Old non-floating stacks glibcs have a fundamental problem that makes HiPE support and threads support mutually exclusive.
- Solaris: Solaris 10 (32-bit and 64-bit) and 9 (32-bit) are supported. The build requires a version of the GNU C compiler (gcc) that has been configured to use the GNU assembler (gas). Sun's x86 assembler is emphatically **not** supported.
- FreeBSD:32位和64位模式下的FreeBSD 6.1和6.2应该可以工作。
- OS X / Darwin:32位模式下的Darwin 9.8.0应该可以工作。
- PowerPC:所有的32位6xx / 7xx(G3)/ 74xx(G4)处理器都应该工作。970(G5)和POWER5处理器上的32位模式应该可以工作。
- 支持Linux(Yellow Dog)和OS X 10.4。
- SPARC:所有运行32位用户代码的UltraSPARC处理器都应该可以工作。
- 支持Solaris 9。构建需要一个已经配置为使用Sun的汇编器和链接器的gcc。使用GNU汇编程序但Sun的连接器已知会导致问题。
- 支持Linux(Aurora)。
- ARM:ARMv5TE(即XScale)处理器应该可以工作。支持big-endian和little-endian模式。
- Linux支持。
HiPE在以下系统上自动启用:
- x86 in 32-bit mode: Linux, Solaris, FreeBSD
- x86 in 64-bit mode: Linux, Solaris, FreeBSD
- PowerPC: Linux, Mac OSX
- SPARC: Linux
- ARM: Linux
在其他支持的系统上,请参阅Advanced Configure
如何启用HiPE。
如果您在支持HiPE的平台上运行,并且如果您尚未禁用HiPE,则可以将模块编译为Erlang外壳中的本地代码:
1> c(Module, native).
要么
1> c(Module, [native|OtherOptions]).
使用erlc程序,像这样写
$ erlc +native Module.erl
本机代码将被放入光束文件,并在光束文件加载时自动加载。
要添加hipe选项,请从Erlang shell中这样写:
1> c(Module, [native,{hipe,HipeOptions}|MoreOptions]).
使用hipe:help_options/0
打印出可用的选项。
1> hipe:help_options().
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com