*.o: Windows 7 无法识别文件格式

*.o: File format not recognized on Windows 7

我在 Windows 7 笔记本电脑上写了一个名为 arbintools for some work-related data analysis and put it on Github. I wrote it and have been using it on my Mac for a while without issue; Today, I tried to install the dev-1 branch 的 R 程序包,与编译某些 Rcpp 函数相关的东西似乎出错了:

devtools::install_github("mjlacey/arbintools", ref = "dev1")

我明白了:

Downloading GitHub repo mjlacey/arbintools@dev1
from URL https://api.github.com/repos/mjlacey/arbintools/zipball/dev1
Installing arbintools
"C:/PROGRA~1/R/R-33~1.0/bin/x64/R" --no-site-file --no-environ --no-save  \
  --no-restore --quiet CMD INSTALL  \
  "C:/Users/matla332.USER/AppData/Local/Temp/Rtmp8WWkKC/devtools124c45026af1/mjlacey-arbintools-41dc363"  \
  --library="C:/Users/matla332.USER/Documents/R/win-library/3.3"  \
  --install-tests 

* installing *source* package 'arbintools' ...
** libs

*** arch - i386
C:\Rtools\mingw_32\bin\nm.exe: RcppExports.o: File format not recognized
C:\Rtools\mingw_32\bin\nm.exe: Rcpp_functions.o: File format not recognized
c:/Rtools/mingw_32/bin/g++ -shared -s -static-libgcc -o arbintools.dll tmp.def RcppExports.o Rcpp_functions.o -Ld:/Compiler/gcc-4.9.3/local330/lib/i386 -Ld:/Compiler/gcc-4.9.3/local330/lib -LC:/PROGRA~1/R/R-33~1.0/bin/i386 -lR
RcppExports.o: file not recognized: File format not recognized
collect2.exe: error: ld returned 1 exit status
no DLL was created
ERROR: compilation failed for package 'arbintools'
* removing 'C:/Users/matla332.USER/Documents/R/win-library/3.3/arbintools'
* restoring previous 'C:/Users/matla332.USER/Documents/R/win-library/3.3/arbintools'
Error: Command failed (1)

安装其他需要一些编译的包(如 dplyr)工作正常。我还将 Mac 上的 R 更新为相同版本 (3.3.0) 并成功重新安装了软件包,它只是在 Windows PC 上不起作用。这超出了我的理解,如果有人有任何建议或解决方案,我将不胜感激。

问题是 .so.o 文件仅适用于相同的体系结构,例如OS X 是 64 位,Windows 是 32 位 (mingw_32)。请将它们从 dev-1/src 中删除,然后你就可以开始了。这些文件是在包安装时自动构建的,因为它们是使用编译器的结果。

删除后,尝试使用以下内容创建 .gitignore 文件:

src/*.o
src/*.so
src/*.dll

这将使 OS 特定文件无法选择进行暂存,进而无法提交。

作为一般经验法则,在使用 Rcpp 时仅将 .cpp.h 文件保留在 /src 内。