【问题标题】:Brotli for R is not compiling correctlyR 的 Brotli 编译不正确
【发布时间】:2018-07-12 18:34:43
【问题描述】:

我正在尝试在 R 中安装 brotli 包。像往常一样,我运行: install.packages("brotli")

但是,由于某种原因,编译似乎没有完成。我现在已经在两个不同的系统上尝试过了(一个在我的 Mac 上,另一个在 EC2 实例上)。以下是错误:

wrapper.c:94:14: error: unknown type name 'R_CallMethodDef'

static const R_CallMethodDef CallEntries[] = {
             ^
wrapper.c:95:28: error: use of undeclared identifier 'DL_FUNC'
  {"R_brotli_compress",   (DL_FUNC) &R_brotli_compress,   3},
                           ^
wrapper.c:96:28: error: use of undeclared identifier 'DL_FUNC'
  {"R_brotli_decompress", (DL_FUNC) &R_brotli_decompress, 1},
                           ^
wrapper.c:100:20: error: unknown type name 'DllInfo'
void R_init_brotli(DllInfo *dll) {
                   ^
wrapper.c:101:3: warning: implicit declaration of function         'R_registerRoutines' is invalid in C99 [-Wimplicit-function-declaration]
  R_registerRoutines(dll, NULL, CallEntries, NULL, NULL);
  ^
wrapper.c:102:3: warning: implicit declaration of function     'R_useDynamicSymbols' is invalid in C99 [-Wimplicit-function-declaration]
  R_useDynamicSymbols(dll, FALSE);
  ^
2 warnings and 4 errors generated.
make: *** [wrapper.o] Error 1
ERROR: compilation failed for package ‘brotli’
* removing     ‘/Library/Frameworks/R.framework/Versions/3.3/Resources/library/brotli’

The downloaded source packages are in
        ‘/private/var/folders/6s/dkpknwzd4d51qm959wqxv7280000gn/T/RtmpHOPjwI/downloa    ded_packages’
Warning message:
In install.packages("brotli") :
  installation of package ‘brotli’ had non-zero exit status

我对 C 语言的熟练程度不如我应该达到的水平,但我尝试对其进行逆向工程但无济于事。我错过了什么吗?我还尝试使用依赖项选项(依赖项 = TRUE)安装它。有人对此有任何想法吗?

【问题讨论】:

  • 什么 R 版本/编译器/等。 (sessionInfo())?您可以检查哪些编译器等。CRAN 检查用于不同系统上的brotli here

标签: r compression brotli


【解决方案1】:

因此,通过对 C 代码进行一些额外的分析,似乎认为解决方案非常简单。我只是没有安装 r-development。在我的 mac 和我的 EC2 上安装后,它现在安装没有问题。这很奇怪,因为我想应该能够在不需要开发包的情况下安装一个体面的 R 包。但也许我在 R 包开发方面经验不足,无法对此事发表意见。尽管如此,我希望这有助于其他寻求安装相同软件包的经验不足的人。不过感谢您的帮助!

【讨论】:

  • 取决于你所说的“体面”。不需要编译的包不应该需要开发包。此外,CRAN 提供的许多用于 MacOS 和 Windows 的软件包的二进制版本不需要开发包。但是一旦你进入编译领域,你将需要必要的工具(编译器、带头文件的库……)。
  • 不确定为什么 brotli 需要它。据我了解,它仍然相对较新(我认为第一个版本是在 2016 年)。也许这只是我缺少的 R 中的一个设置。不过,据我所知,安装开发包解决了这个问题。我曾尝试寻找该软件包的直接二进制版本,但没有成功。
  • cran.r-project.org/package=brotli我们学到了两件事:首先,brotli包需要编译。其次,MacOS 的二进制版本可用于 R 版本 (3.5) 和 R oldrelease (3.4)。您正在使用 R 3.3,它对于来自 CRAN 的二进制包来说太旧了。
猜你喜欢
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-12
  • 2018-12-23
  • 2018-09-18
  • 1970-01-01
相关资源
最近更新 更多