提问人:Dr. Soong 提问时间:8/31/2023 最后编辑:Dr. Soong 更新时间:8/31/2023 访问量:93
在 Ubuntu-22.04 上从源代码构建 R-3.6.1
Building R-3.6.1 from source on Ubuntu-22.04
问:
'嗨,
我们的集群运行的是 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 yylloc
apt-file search yyllocL
但是
libmailutils-dev: /usr/include/mailutils/yyloc.hapt-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
答: 暂无答案
评论
gcc --version
gcc --version