在 Ubuntu-22.04 上从源代码构建 R-3.6.1

Building R-3.6.1 from source on Ubuntu-22.04

提问人:Dr. Soong 提问时间:8/31/2023 最后编辑:Dr. Soong 更新时间:8/31/2023 访问量:93

问:

'嗨,

我们的集群运行的是 Ubuntu-22.04。由于软件包需要特定版本的 R,我需要在节点上提供 R-3.6.1。

通过包管理器,可以安装的最早的 R 版本是 3.6.3-2:

apt-cache madison r-base

R-基座 |4.3.1-4.2204.0 jammy-cran40/ 软件包 R-基座 |4.3.1-3.2204.0 jammy-cran40/ 软件包 R-基座 |4.3.1-2.2204.0 jammy-cran40/ 软件包 R-基座 |4.3.1-1.2204.0 jammy-cran40/ 软件包 R-基座 |4.3.0-1.2204.0 jammy-cran40/ 软件包 R-基座 |4.2.3-1.2204.0 jammy-cran40/ 软件包 R-基座 |4.2.2.20221110-1.2204.0 jammy-cran40/ 软件包 R-基座 |4.2.2-1.2204.0 jammy-cran40/ 软件包 R-基座 |4.2.1-3.2204.0 jammy-cran40/ 软件包 R-基座 |4.2.1-2.2204.0 jammy-cran40/ 软件包 R-基座 |4.2.1-1.2204.0 jammy-cran40/ 软件包 R-基座 |4.2.0-1.2204.0 jammy-cran40/ 软件包 R-基座 |4.1.2-1ubuntu2 amd64 软件包 R-基座 |4.1.2-1ubuntu2 i386 软件包 R-基座 |3.6.3-2 |http://de.archive.ubuntu.com/ubuntu 焦点/宇宙来源

在一个通用软件目录中,我保留了可以在所有节点上访问的 R 的编译版本。这是添加到路径中,以便 bash 脚本可以找到它。

R-3.6.3 的编译使用以下配置选项工作:

./configure --with-blas --with-lapack --with-readline --with-readline --with-cairo --with-libpng --with-jpeglib --with-libtiff --enable-R-shlib --with-x --with-recommended-packages --enable-R-shlib --enable-BLAS-shlib --enable-shared=lapack --enable-shared=blas --with-tcltk --with-tcl-config=/usr/lib/x86_64-linux-gnu/tcl8.6/tclConfig.sh --with-tk-config=/usr/lib/x86_64-linux-gnu/tk8.6/tkConfig.sh --prefix=$(pwd)

gcc 编译器通过包管理器和版本 11.4.0 安装:

gcc --version
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
版权所有 (C) 2021 Free Software Foundation, Inc.
这是免费软件;有关复制条件,请参阅源代码。没有
保修;甚至不是为了适销性或特定用途的适用性。

但是我无法构建 R-3.6.1,因为它遇到了带有“tools.so”的链接器错误:

installing 'sysdata.rda'
Error in dyn.load(file, DLLpath = DLLpath, ...) : 
unable to load shared object '/storage1/Software/ubuntu/R/R-3.6.1/library/tools/libs/tools.so':
>   /storage1/Software/ubuntu/R/R-3.6.1/library/tools/libs/tools.so: undefined symbol: yyllocL
Error: unable to load R code in package 'tools'
Execution halted
make[4]: *** [../../../share/make/basepkg.mk:151: sysdata] Error 1
make[4]: Leaving directory '/storage1/Software/ubuntu/R/R-3.6.1/src/library/tools'
make[3]: *** [Makefile:36: all] Error 2
make[3]: Leaving directory '/storage1/Software/ubuntu/R/R-3.6.1/src/library/tools'
make[2]: *** [Makefile:37: R] Error 1
make[2]: Leaving directory '/storage1/Software/ubuntu/R/R-3.6.1/src/library'
make[1]: *** [Makefile:28: R] Error 1
make[1]: Leaving directory '/storage1/Software/ubuntu/R/R-3.6.1/src'
make: *** [Makefile:61: R] Error 1

我很困惑为什么这只发生在 R-3.6.1 上 - 毕竟这只是一个小版本更改。

我无法通过以下方式找到“yyllocL”:
apt-cache search yyllocapt-file search yyllocL

但是

libmailutils-dev: /usr/include/mailutils/yyloc.h
apt-file search yyloc

然后我安装了这个包:
apt-get install libmailutils-dev

但这也没有帮助,因为这似乎只安装上面提到的包含文件:
/usr/include/mailutils/yyloc.h

但是我设法找到了这个论坛帖子,其中提到了 yy-lexer。

然后我安装了这些软件包:
apt-get install flex flexc++ yydebug r-cran-isoweek

后者可能只与包管理器的 R 版本有关,但 flex 和 yydebug 似乎是不错的候选者。

经过一个完整的循环:

make clean
./configure --with-blas --with-lapack --with-readline --with-readline --with-cairo --with-libpng --with-jpeglib --with-libtiff --enable-R-shlib --with-x --with-recommended-packages --enable-R-shlib --enable-BLAS-shlib --enable-shared=lapack --enable-shared=blas --with-tcltk --with-tcl-config=/usr/lib/x86_64-linux-gnu/tcl8.6/tclConfig.sh --with-tk-config=/usr/lib/x86_64-linux-gnu/tk8.6/tkConfig.sh --prefix=$(pwd)

make -j4

不过,要重建它,我遇到了同样的错误。

使用 R-3.6.3 只是部分选项,因为 - 令我沮丧的是 - 尽管次要版本升级,所有软件包不仅会重新编译,而且部分会完全失败,因为它们似乎维护得很糟糕。

为了保持分析工作流程的可重复性,我们需要在集群节点上安装 R-3.6.1。

使用 docker/rocker 可能是一种解决方法,但需要对科学家使用的所有分析脚本进行调整。

该错误可能是由于与 Ubuntu-20.04 相比更新版本的 gcc 造成的吗?也许在 gcc 中使用“替代品”并使用旧版本会有所帮助?但我只期望有编译问题,而这显然是一个链接器问题。

如果我知道“yylocL”库的位置,我会设置LD_LIBRARY_PATH;它是否与 yydebug 软件包一起安装?

export LDFLAGS=-L/storage1/Software/ubuntu/R/R-3.6.1/library/
export LD_LIBRARY_PATH=/storage1/Software/ubuntu/R/R-3.6.1/library

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/storage1/Software/ubuntu/R/R-3.6.1/lib
export LDFLAGS=-L/storage1/Software/ubuntu/R/R-3.6.1/lib

使用 nm 检查会在 tools.so 中显示更多未定义的符号:

nm -u /storage1/Software/ubuntu/R/R-3.6.1/library/tools/libs/tools.so 
                 U ALTREP_LENGTH
                 U ALTSTRING_ELT
                 U ALTVEC_DATAPTR
                 U chmod@GLIBC_2.2.5
                 U closedir@GLIBC_2.2.5
                 U __ctype_b_loc@GLIBC_2.3
                 U __ctype_get_mb_cur_max@GLIBC_2.2.5
                 w __cxa_finalize@GLIBC_2.2.5
                 U dcgettext@GLIBC_2.2.5
                 U __errno_location@GLIBC_2.2.5
                 U extR_HTTPDCreate
                 U extR_HTTPDStop
                 U fclose@GLIBC_2.2.5
                 U ferror@GLIBC_2.2.5
                 U fopen@GLIBC_2.2.5
                 U fread@GLIBC_2.2.5
                 U free@GLIBC_2.2.5
                 U fwrite@GLIBC_2.2.5
                 U getConnection
                 U getpriority@GLIBC_2.2.5
                 w __gmon_start__
                 U INTEGER
                 w _ITM_deregisterTMCloneTable
                 w _ITM_registerTMCloneTable
                 U kill@GLIBC_2.2.5
                 U LENGTH
                 U malloc@GLIBC_2.2.5
                 U mbcslocale
                 U __memcpy_chk@GLIBC_2.3.4
                 U memcpy@GLIBC_2.14
                 U __memmove_chk@GLIBC_2.3.4
                 U memmove@GLIBC_2.2.5
                 U opendir@GLIBC_2.2.5
                 U parseError
                 U R_alloc
                 U R_BadLongVector
                 U R_BaseEnv
                 U RC_fopen
                 U R_CHAR
                 U R_chk_calloc
                 U R_chk_free
                 U R_chk_realloc
                 U R_ClassSymbol
                 U Rconn_fgetc
                 U readdir@GLIBC_2.2.5
                 U realloc@GLIBC_2.2.5
                 U R_EmptyEnv
                 U Rf_allocVector
                 U Rf_allocVector3
                 U Rf_asInteger
                 U Rf_asLogical
                 U Rf_begincontext
                 U Rf_coerceVector
                 U Rf_cons
                 U Rf_defineVar
                 U Rf_duplicate
                 U Rf_endcontext
                 U Rf_envlength
                 U Rf_error
                 U Rf_findVar
                 U Rf_getAttrib
                 U Rf_getCharCE
                 U R_FileExists
                 U Rf_imax2
                 U Rf_install
                 U Rf_installTrChar
                 U Rf_isString
                 U Rf_length
                 U Rf_lengthgets
                 U Rf_mbrtowc
                 U Rf_mkChar
                 U Rf_mkCharCE
                 U Rf_mkCharLen
                 U Rf_mkCharLenCE
                 U R_forceSymbols
                 U Rf_PairToVectorList
                 U Rf_protect
                 U Rf_ScalarInteger
                 U Rf_ScalarLogical
                 U Rf_ScalarString
                 U Rf_setAttrib
                 U Rf_strchr
                 U Rf_translateChar
                 U Rf_translateCharUTF8
                 U Rf_unprotect
                 U Rf_warning
                 U Rf_warningcall
                 U Rf_xlengthgets
                 U R_NaInt
                 U R_NaString
                 U R_NewHashedEnv
                 U R_NewPreciousMSet
                 U R_NilValue
                 U R_ParseContext
                 U R_ParseContextLast
                 U R_ParseContextLine
                 U R_ParseError
                 U R_ParseErrorMsg
                 U R_PPStack
                 U R_PPStackSize
                 U R_PPStackTop
                 U R_PreserveInMSet
                 U Rprintf
                 U R_registerRoutines
                 U R_ReleaseFromMSet
                 U R_signal_protect_error
                 U R_SrcfileSymbol
                 U R_SrcrefSymbol
                 U R_UnboundValue
                 U R_useDynamicSymbols
                 U SETCAR
                 U SETCDR
                 U setpriority@GLIBC_2.2.5
                 U SET_STRING_ELT
                 U SET_VECTOR_ELT
                 U __snprintf_chk@GLIBC_2.3.4
                 U snprintf@GLIBC_2.2.5
                 U __sprintf_chk@GLIBC_2.3.4
                 U __stack_chk_fail@GLIBC_2.4
                 U stat@GLIBC_2.33
                 U __stpcpy_chk@GLIBC_2.3.4
                 U stpcpy@GLIBC_2.2.5
                 U __strcat_chk@GLIBC_2.3.4
                 U strchr@GLIBC_2.2.5
                 U strcmp@GLIBC_2.2.5
                 U __strcpy_chk@GLIBC_2.3.4
                 U strcspn@GLIBC_2.2.5
                 U STRING_ELT
                 U strlen@GLIBC_2.2.5
                 U strncmp@GLIBC_2.2.5
                 U __strncpy_chk@GLIBC_2.3.4
                 U strncpy@GLIBC_2.2.5
                 U strstr@GLIBC_2.2.5
                 U TYPEOF
                 U vmaxget
                 U vmaxset
                 U yyllocL

有没有人从 Ubuntu 22.04 上的源代码成功构建 R-3.6.1?非常感谢有关如何在 Ubuntu-22.04 上构建 R-3.6.1 的任何建议。

此致敬意

Dr_Soong

R 链接器错误 ubuntu-22.04

评论

0赞 Chris 8/31/2023
你在用什么?gcc --version
0赞 Dr. Soong 9/1/2023
正如我公认的长描述中提到的,gcc 的默认软件包版本: gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0gcc --version
0赞 Dr. Soong 9/1/2023
我使用 madison 和替代品来安装 gcc-9,根据我的研究,它是 Ubuntu-20.04 的一部分 - 其中 3.6.1 的构建是成功的。' apt-get -s install build-essential=12.8ubuntu1' 使用 make clean ./configure...make -j4 循环,我又遇到了同样的错误。不过,我不确定这是否也将链接器更改为 Ubuntu-20.04 的版本。ld --version GNU ld (GNU Binutils for Ubuntu) 2.38 版权所有 (C) 2022 Free Software Foundation, Inc. 不能是 2020 年 Ubuntu-20.04 附带的那个。
0赞 Dr. Soong 9/1/2023
如何安装与 Ubuntu-20.04 的 ld 版本相对应的替代版本?我无法用''apt-cache madison ld'找到它?
0赞 Chris 9/1/2023
我猜它会是 gcc-8,因为那是 2019 年 R-3.6.1 时的 ubuntu 20.04 版本。我没有 gcc-8,但由于 gcc 10 中的更改,我无法从源代码构建 3.6.1(像你一样,我是 gcc 11)配置或使 CC 选项 CC='fcommon'...但是,考虑到你的组织的纵向性质,这也在向前发展,其跨度(在制度上可能达到R-8.9。

答: 暂无答案