【发布时间】:2022-08-19 14:59:23
【问题描述】:
我正在尝试在 Ubuntu 18.04 系统上从源代码安装的 R 4.2.0 安装上安装 rgl。包似乎正在正确构建,但是当 R 尝试测试它是否可以加载包时出现分段错误。无论我是从 CRAN 安装还是直接从 rgl repo 安装,都会发生这种情况:
[...]
** R
** demo
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
*** copying figures
** building package indices
** installing vignettes
** testing if installed package can be loaded from temporary location
Segmentation fault (core dumped)
ERROR: loading failed
知道发生了什么或我可以检查什么?
编辑 1
我尝试遵循@user2554330 的建议,安装了跳过安装后检查的包,然后在调试器下的 R 会话中加载它(我使用了valgrind)。这是跟踪,它对我不是很有帮助,但希望对你有帮助:
==36041== Conditional jump or move depends on uninitialised value(s)
==36041== at 0x56914B7: __wmemchr_avx2 (memchr-avx2.S:275)
==36041== by 0x55EC518: internal_fnwmatch (fnmatch_loop.c:168)
==36041== by 0x55EF987: fnmatch@@GLIBC_2.2.5 (fnmatch.c:434)
==36041== by 0x16F2EB35: ??? (in /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
==36041== by 0x55E1FA3: __scandir_tail (scandir-tail.c:54)
==36041== by 0x16F2EE6D: ??? (in /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
==36041== by 0x16E52A98: ??? (in /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
==36041== by 0x14940103: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
==36041== by 0x14932F37: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
==36041== by 0x1492E5C3: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
==36041== by 0x1492EFA4: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
==36041== by 0x12C9B5EC: rgl::X11GUIFactory::createWindowImpl(rgl::Window*) (x11gui.cpp:662)
==36041==
==36041== Conditional jump or move depends on uninitialised value(s)
==36041== at 0x5691497: __wmemchr_avx2 (memchr-avx2.S:264)
==36041== by 0x55EC518: internal_fnwmatch (fnmatch_loop.c:168)
==36041== by 0x55EF987: fnmatch@@GLIBC_2.2.5 (fnmatch.c:434)
==36041== by 0x16F2EB35: ??? (in /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
==36041== by 0x55E1FA3: __scandir_tail (scandir-tail.c:54)
==36041== by 0x16F2EE6D: ??? (in /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
==36041== by 0x16F2ADD1: ??? (in /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
==36041== by 0x1693F41C: ??? (in /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
==36041== by 0x169391EA: ??? (in /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
==36041== by 0x16E52AA0: ??? (in /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
==36041== by 0x14940103: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
==36041== by 0x14932F37: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
==36041==
==36041== Invalid read of size 8
==36041== at 0x12C8EC50: rgl::Window::on_close() (gui.cpp:306)
==36041== by 0x12C79B83: rgl::DeviceManager::createTestWindow() (devicemanager.cpp:171)
==36041== by 0x12C8EE67: rgl_init (init.cpp:97)
==36041== by 0x4F38F03: ??? (in /usr/lib/R/lib/libR.so)
==36041== by 0x4F7B2AA: ??? (in /usr/lib/R/lib/libR.so)
==36041== by 0x4F8565F: Rf_eval (in /usr/lib/R/lib/libR.so)
==36041== by 0x4F8746E: ??? (in /usr/lib/R/lib/libR.so)
==36041== by 0x4F88236: Rf_applyClosure (in /usr/lib/R/lib/libR.so)
==36041== by 0x4F7C093: ??? (in /usr/lib/R/lib/libR.so)
==36041== by 0x4F8565F: Rf_eval (in /usr/lib/R/lib/libR.so)
==36041== by 0x4F8746E: ??? (in /usr/lib/R/lib/libR.so)
==36041== by 0x4F88236: Rf_applyClosure (in /usr/lib/R/lib/libR.so)
==36041== Address 0x20 is not stack\'d, malloc\'d or (recently) free\'d
-
您可以使用选项
INSTALL_opts=\"--no-test-load\"安装它以避免安装时的测试负载,然后在调试器下运行R 并尝试使用通常的library(rgl)加载它。调试器应该告诉你段错误发生在哪里。 -
@user2554330 这是否意味着他们应该运行
Sys.setenv(INSTALL_opts=\"--no-test-load\")然后尝试安装软件包? -
不,运行
install.packages(\"rgl\", INSTALL_opts=\"--no-test-load\")。 -
并且“在调试器下运行”表示使用
R -d gdb运行 R,如果gdb是您的调试器,则在gdb提示符下键入run。 -
@user2554330 之前也没有遇到过。希望它有效
标签: r segmentation-fault rgl