RNode 编译

From RChain Developer Resource

在您编译之前,请确认如果您只是需要运行的客户端或docker镜像,请参考以下两个地址是否已经有相应的内容:

更多信息请参考RNode运行章节。

不建议使用windows环境进行编译。

编译环境[edit | edit source]

RNode编译需要的环境:

  • JDK 10或11
  • sbt,Scala语言的交互式编译工具

以下两个依赖主要于用rholang的分析、编译和转换:

  • jflex,1.7.0,语法分析器,主要用于rholang的分析编译
  • BNFC >= 2.8.3,编译器构建工具

Archlinux环境下的编译[edit | edit source]

安装依赖[edit | edit source]

通过pacman安装jdk、sbt和bnfc:

sudo pacman -S jdk11-openjdk sbt

安装jflex,请不要使用aur仓库中的jfex,其版本>=1.8,rchain需要1.7.0的版本。此处需要编辑PKGBUILD文件。

yay -S jflex --editmenu

更改版本pkgver为1.7.0,在md5处修改第一个为SKIP,修改后的内容如下:

pkgname=jflex
pkgver=1.7.0
pkgrel=1
pkgdesc="A lexer generator written in Java"
arch=('any')
url="http://www.jflex.de/"
license=('GPL')
depends=('java-environment' 'bash')
changelog='Changelog'
source=(https://github.com/jflex-de/jflex/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz
        jflex.sh)
md5sums=('SKIP'
         '69cd460b4345372103b8301b456cbd1d')

package() {
  cd "$srcdir/$pkgname-$pkgver"
  install -m644 -D lib/${pkgname}-full-${pkgver}.jar \
    "$pkgdir/usr/share/java/$pkgname/jflex.jar"
  install -m644 -D doc/manual.pdf \
    "$pkgdir/usr/share/doc/$pkgname/manual.pdf"
  install -m644 -D lib/jflex.vim \
    "$pkgdir/usr/share/vim/syntax/jflex.vim"
  install -m755 -D "$srcdir/jflex.sh" "$pkgdir/usr/bin/jflex"
}

下载源代码[edit | edit source]

下载源代码之前确认你已经安装git

使用以下命令下载从主仓库下载源代码文件夹至当前目录:

git clone https://github.com/rchain/rchain.git

编译[edit | edit source]

进入目录:

cd rchain

默认分支不一定是你想编译的目标,切换分支(更改dev至你需要的分支):

git checkout dev

本地包编译[edit | edit source]

运行sbt工具编译并生成:

sbt -mem 4096 clean compile stage docker:publishLocal

-mem 4096表示编译使用的最大内存为4G,根据你的内存选择使用,过小的内存会出现以下错误:

java.lang.OutOfMemoryError: Java heap space

编译完成后即可在下面路径看到编译的结果,

./node/target/universal/stage/bin/rnode

其目录结构与RChain Releases页面发布的程序是相同的,因此运行方式相同,参见RChain 节点运行(客户端)

docker镜像打包[edit | edit source]

可以使用以下命令编译并生成 docker镜像

sbt -mem 4096 clean compile docker:publishLocal

通过docker images命令即可查看相应的镜像:

REPOSITORY                       TAG                                          IMAGE ID       CREATED          SIZE
coop.rchain/rnode                0.8-4129-g35f6478                            7c2214e26ed7   10 minutes ago   386MB
coop.rchain/rnode                latest                                       7c2214e26ed7   10 minutes ago   386MB

Docker镜像的运行方式参见RChain 节点运行(Docker)章节。

Q&A[edit | edit source]

命令行提示command not found:xxx
请确认相应的包已经安装
错误提示:java.lang.IllegalArgumentException: invalid source release: 11
请确认已经安装jdk11,且默认jdk为11。在Archlinux中,使用archlinux-java来设置默认jdk
出现类似以下的错误:
src_managed/main/coop/rchain/rholang/ast/rholang_mercury/Yylex.java:445:1: no suitable constructor found for Location(int,int,long)
[error]     constructor java_cup.runtime.ComplexSymbolFactory.Location.Location(java.lang.String,int,int) is not applicable
[error]       (argument mismatch; int cannot be converted to java.lang.String)
[error]     constructor java_cup.runtime.ComplexSymbolFactory.Location.Location(int,int,int) is not applicable
[error]       (argument mismatch; possible lossy conversion from long to int)
[error] new ComplexSymbolFactory.Location(yyline+1, yycolumn+1, yychar)
这个是类的构造函数不匹配,是库错误造成的,请检查jflex是否是1.7.0版本。