【问题标题】:loop_apply.o: file not recognized: File format not recognizedloop_apply.o:文件无法识别:文件格式无法识别
【发布时间】:2018-02-15 11:44:42
【问题描述】:

我正在尝试安装 R 的 plyr 软件包。这是错误消息:

* installing *source* package ‘plyr’ ...
** package ‘plyr’ successfully unpacked and MD5 sums checked
** libs
clang++  -I/opt/R-3.4.1/include -DNDEBUG  -I"/home/isomorphismes/R/i686-pc-linux-gnu-library/3.4/Rcpp/include" -I/usr/local/include   -fpic  -I/opt/boost_1_61_0/boost -c RcppExports.cpp -o RcppExports.o
clang -I/opt/R-3.4.1/include -DNDEBUG  -I"/home/cd/R/i686-pc-linux-gnu-library/3.4/Rcpp/include" -I/usr/local/include   -fpic  -g -O2 -flto -c loop_apply.c -o loop_apply.o
clang++  -I/opt/R-3.4.1/include -DNDEBUG  -I"/home/isomorphismes/R/i686-pc-linux-gnu-library/3.4/Rcpp/include" -I/usr/local/include   -fpic  -I/opt/boost_1_61_0/boost -c split-numeric.cpp -o split-numeric.o
clang++ -shared -L/usr/local/lib -o plyr.so RcppExports.o loop_apply.o split-numeric.o
loop_apply.o: file not recognized: File format not recognized
clang: error: linker command failed with exit code 1 (use -v to see invocation)
/opt/R-3.4.1/share/make/shlib.mk:6: recipe for target 'plyr.so' failed
make: *** [plyr.so] Error 1
ERROR: compilation failed for package ‘plyr’
* removing ‘/home/cd/R/i686-pc-linux-gnu-library/3.4/plyr’

*.o 文件位于/opt/plyr/src,来自 github.com/hadley/plyr。它们在我的系统上看起来像这样:

i@scheherezade:/opt/plyr/src$ file *o
loop_apply.o:    LLVM IR bitcode
RcppExports.o:   ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
split-numeric.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped

【问题讨论】:

    标签: r linux build clang plyr


    【解决方案1】:

    如果您不知道,-flto 指定链接时间优化,并且已由 R 添加。您是如何设法以这种错误配置的 R 安装结束的?

    将 -flto 添加到链接命令可能有效吗?或者从 loop_apply 编译行中删除它。如果其中任何一个工作,您需要修复您的 R 安装。

    【讨论】:

    • 哈。在这里忽略@TonyFischetti 的建议:onthelambda.com/2013/11/22/… 谢谢,DaBookshah。
    • 我不确定如何更改安装过程(例如更改编译行或链接器),但在没有./configure --enable-lto 的情况下进行编译。我想这个问题提供了stackoverflow.com/questions/23736507/… 的答案?
    • *但是在没有./configure --enable-lto的情况下编译解决了它。
    • 为了将来参考,您可以通过编辑 Makeconf 文件来更改包安装过程。在 Windows 上,它位于 /etc/x64/Makeconf 下。在其他平台上,它会在类似的地方。尽管编辑此文件可能不是解决您在此处给出的问题的推荐方法。
    • 谢谢@DaBookshah!
    【解决方案2】:

    使用 clang 编译 -flto 需要(在 Ubuntu 上)安装 llvm-dev 包。否则,链接器无法处理-flto 目标文件。

    apt-get install clang-10 llvm-10-dev
    

    现在链接应该成功了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 2013-06-12
      • 1970-01-01
      • 2018-10-21
      • 1970-01-01
      • 2011-05-25
      相关资源
      最近更新 更多