在我的计算机debian 9(stretch)上,我已经从源代码安装了R4.2.0。我使用以下语法安装nloptr 2.0.0时遇到问题:if (!require("nloptr", quietly = TRUE)) BiocManager::install("nloptr")
我得到的错误是:
/opt/R/4.2.0/lib/R/etc/Makeconf:177: recipe for target 'test-C-API.o' failed
make: *** [test-C-API.o] Error 1
ERROR: compilation failed for package ‘nloptr’
* removing ‘/home/ezop/R/x86_64-pc-linux-gnu-library/4.2/nloptr’
The downloaded source packages are in
‘/tmp/Rtmpqk35gk/downloaded_packages’
Warning message:
In install.packages(...) :
installation of package ‘nloptr’ had non-zero exit status
我也试过通过复制我在网上找到的编译后的二进制文件来安装它,但后来我遇到了这个错误:
> library(nloptr)
Error: package or namespace load failed for ‘nloptr’ in dyn.load(file, DLLpath = DLLpath, ...):
unable to load shared object '/home/ezop/R/x86_64-pc-linux-gnu-library/4.2/nloptr/libs/nloptr.so':
/home/ezop/R/x86_64-pc-linux-gnu-library/4.2/nloptr/libs/nloptr.so: invalid ELF header
我已经检查了标题和机器信息,但我不知道下一步该怎么做:
base) root@kanta:/home/ezop/R/x86_64-pc-linux-gnu-library/4.2# file /home/ezop/R/x86_64-pc-linux-gnu-library/4.2/nloptr/libs/nloptr.so
/home/ezop/R/x86_64-pc-linux-gnu-library/4.2/nloptr/libs/nloptr.so: Mach-O 64-bit x86_64 dynamically linked shared library, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|WEAK_DEFINES|BINDS_TO_WEAK|NO_REEXPORTED_DYLIBS|HAS_TLV_DESCRIPTORS>
(base) root@kanta:/home/ezop/R/x86_64-pc-linux-gnu-library/4.2# uname -a
Linux kanta 4.9.0-18-amd64 #1 SMP Debian 4.9.303-1 (2022-03-07) x86_64 GNU/Linux
2条答案
按热度按时间pgky5nke1#
几分钟前我也遇到了同样的问题。我试着安装cmake和gfortran,但几乎没有成功。我注意到,当我最后一次尝试
install.packages("nloptr")
时,出现了以下错误消息:There are binary versions available but the source versions are later. Do you want to install from sources the package which needs compilation?
.珍妮·布莱恩解释说,一个简单的"不"就可以了。
我希望这对你也有用。
5lhxktic2#
我刚刚在R版本4.1.1(2021-08-10)平台下偶然发现了这个同样的问题:x86_64-个人电脑-Linux-gnu(64位)
我的Linux系统上没有安装nlopt,但安装了cmake/3.17.3
因此,在安装nloptr_2.0.3期间
我们看到pkg-config无法找到nlopt,因此它检查了cmake以从源代码重新生成nlopt:
错误为
由于函数
abs()
的重载函数匹配不明确如果您解压并解压缩源代码(nloptr.tar.gz)并查看文件src/test-C-API.cpp,您可以在上下文中看到对
expect_true()
的调用:其中abs()的参数为“double”,但更仔细地查看R安装尝试中的错误消息,似乎abs()的唯一候选函数声明是针对输入类型int或long int,而不是“double”
在我的例子中,所包含的库集合似乎不包括其中为浮点类型定义了
abs()
的库,例如cmath。在我的例子中,cmath位于/usr/include/c++/6.2.1/中,尽管将其包含在test-C-API. h中,作为没有解决这个问题-我不熟悉Catch单元测试库或
testthat()
函数,所以不知道为什么这个修复尝试失败。也许其他人可以加入一个涉及cmath的替代修复。我的工作是编辑test-C-API.cpp,注解掉最后
test_that()
中依赖于abs(double)的两行,从"expect_true(abs(res[..."
开始,保存它,然后tar和gzip重新压缩整个目录树,然后使用这个本地 * 现在已编辑 * 文件安装:安装按预期进行,我的测试R代码给了我想要的结果。我预计我的R代码不会有
abs()
的问题,只是他们用C++编写的单元测试是在我的系统设置下进行的。