终于遇到了大家“喜闻乐见”的
Matrix
包问题,就是as_cholmod_sparse
,大家如果经常是使用r语言跑单细胞转录组就大概率会遇到,其实解决方案我们早就摸索好了也发给大家了:
# remove.packages("Matrix")
# remove.packages("irlba")
# BiocManager::install("irlba",force = T)
# BiocManager::install("Matrix",force = T)
就是卸载两个包之后再重新安装即可,如果重新安装的时候没有保证安装到指定版本,就需要最后的大招;remotes::install_version
,但是我遇到的问题比较奇葩说需要低版本的:
remotes::install_version("Matrix", version = "1.6-1.1")
并不是说要大家都安装这个低版本哦,因为每个人的电脑里面的r和其它r包版本都不一样,都是互相依赖的,所以每个人需要的版本都不一样,这一点非常的热心,比如你有可能会遇到如下所示的报错:
namespace ‘Matrix’ 1.6-1.1 is being loaded, but >= 1.6.3 is required
Error: package ‘SeuratObject’ could not be loaded
这个解决方案对绝大部分人来说都是ok的,但是就怕碰到MacOS电脑,因为它有普通因特尔芯片和Mac的arm芯片两个略微有差异的情形。比如你大概率会遇到下面的问题:
ld: warning: -single_module is obsolete
ld: warning: -multiply_defined is obsolete
ld: warning: search path '/opt/gfortran/lib/gcc/x86_64-apple-darwin20.0/12.2.0' not found
ld: warning: search path '/opt/gfortran/lib' not found
ld: library 'gfortran' not found
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Matrix.so] Error 1
ERROR: compilation failed for package ‘Matrix’
一般人看到了这样的报错信息肯定是非常头大,有gcc,gfortran,clang这些可能导致报错的原因。
Homebrew 是一款用于在 macOS 上安装和管理软件包的包管理器。它使得在 macOS 系统上安装、更新和删除软件变得更加简单。Homebrew 规则和约定:
/usr/local
目录下,而不是系统默认的 /usr
目录。这有助于避免与系统自带软件发生冲突。/opt/homebrew/Cellar
目录下,而 Homebrew 本身则安装在 /opt/homebrew
目录中。避免与系统目录产生冲突,并确保用户在维护和管理软件包时有更多的灵活性。/usr/local
目录,以避免冲突和混乱。建议查阅官方文档以获取最新信息:Homebrew 官方网站。
gfortran
和 gcc
是 GNU Compiler Collection(GNU 编译器集合)的一部分,它们分别用于编译 Fortran 和 C/C++ 语言的代码。在 macOS 中,这两个编译器通常一起安装,并且在命令行中都可以使用。
gfortran
:gfortran
是 GNU Fortran Compiler 的缩写。gfortran
命令调用。gcc
:gcc
是 GNU Compiler Collection 的缩写,是一个通用的编译器,支持多种编程语言,包括 C、C++、Fortran 等。gcc
实际上是一个指向 clang
(LLVM 编译器)的符号链接。gcc
命令时,实际上是在调用 LLVM 的 Clang 编译器。在 macOS 中,由于默认情况下系统使用 LLVM 的 Clang 作为 C/C++ 编译器,gcc
实际上是一个指向 Clang 的符号链接。但是,为了兼容性和一些历史原因,gfortran
通常仍然是 GNU 的 Fortran 编译器。
很简单的命令如下所示:
% brew install gcc
% brew reinstall gcc
==> Downloading https://ghcr.io/v2/homebrew/core/gcc/manifests/13.2.0-2
==> Pouring gcc--13.2.0.arm64_sonoma.bottle.2.tar.gz
🍺 /opt/homebrew/Cellar/gcc/13.2.0: 1,489 files, 364.3MB
==> Running `brew cleanup gcc`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
首先需要定位到核心问题, 就是:
'/opt/gfortran/lib/gcc/x86_64-apple-darwin20.0/12.2.0' not found
然后我们电脑里面确实是已经使用Homebrew安装gcc的时候有了所需要的库文件:
ls -lh /opt/homebrew/Cellar/gcc/13.2.0/lib/gcc/current
创建报错信息提示的那个缺失的文件夹,然后把库文件复制过去即可
sudo mkdir -p /opt/gfortran/lib/gcc/x86_64-apple-darwin20.0/12.2.0
sudo cp /opt/homebrew/Cellar/gcc/13.2.0/lib/gcc/current/* /opt/gfortran/lib/gcc/x86_64-apple-darwin20.0/12.2.0
最后就成功啦,如下所示:
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded from temporary location
** checking absolute paths in shared objects and dynamic libraries
** testing if installed package can be loaded from final location
** testing if installed package keeps a record of temporary installation path
* DONE (Matrix)
比如Windows,其实应该是会依赖于 rtools
如果是Ubuntu等Linux操作系统,应该是可以安装缺失的库文件,或者使用conda管理。