mac的homebrew会把gcc安装在哪里

2024-01-14 21:27:45 浏览数 (3)

终于遇到了大家“喜闻乐见”的 Matrix 包问题,就是 as_cholmod_sparse ,大家如果经常是使用r语言跑单细胞转录组就大概率会遇到,其实解决方案我们早就摸索好了也发给大家了:

代码语言:javascript复制
# remove.packages("Matrix")
# remove.packages("irlba")
# BiocManager::install("irlba",force = T)
# BiocManager::install("Matrix",force = T)

就是卸载两个包之后再重新安装即可,如果重新安装的时候没有保证安装到指定版本,就需要最后的大招;remotes::install_version ,但是我遇到的问题比较奇葩说需要低版本的:

代码语言:javascript复制
remotes::install_version("Matrix", version = "1.6-1.1")

并不是说要大家都安装这个低版本哦,因为每个人的电脑里面的r和其它r包版本都不一样,都是互相依赖的,所以每个人需要的版本都不一样,这一点非常的热心,比如你有可能会遇到如下所示的报错:

代码语言:javascript复制
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芯片两个略微有差异的情形。比如你大概率会遇到下面的问题:

代码语言:javascript复制
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

Homebrew 是一款用于在 macOS 上安装和管理软件包的包管理器。它使得在 macOS 系统上安装、更新和删除软件变得更加简单。Homebrew 规则和约定:

  1. 早期的Homebrew 默认将软件安装在 /usr/local 目录下,而不是系统默认的 /usr 目录。这有助于避免与系统自带软件发生冲突。
  2. 最近的 Homebrew 默认会软件包安装在 /opt/homebrew/Cellar 目录下,而 Homebrew 本身则安装在 /opt/homebrew 目录中。避免与系统目录产生冲突,并确保用户在维护和管理软件包时有更多的灵活性。
  3. Homebrew 不会要求超级用户权限(sudo),因此所有的软件包安装在用户的 home 目录下。
  4. Homebrew 会将软件包安装在独立的目录中,并使用符号链接来链接到 /usr/local 目录,以避免冲突和混乱。

建议查阅官方文档以获取最新信息:Homebrew 官方网站。

Mac电脑里面的gfortran和gcc有什么关系呢

gfortrangcc 是 GNU Compiler Collection(GNU 编译器集合)的一部分,它们分别用于编译 Fortran 和 C/C 语言的代码。在 macOS 中,这两个编译器通常一起安装,并且在命令行中都可以使用。

  1. gfortran
    • gfortran 是 GNU Fortran Compiler 的缩写。
    • 用于编译和链接 Fortran 语言的源代码。
    • 在终端中可以使用 gfortran 命令调用。
  2. gcc
    • gcc 是 GNU Compiler Collection 的缩写,是一个通用的编译器,支持多种编程语言,包括 C、C 、Fortran 等。
    • 在 macOS 上,gcc 实际上是一个指向 clang(LLVM 编译器)的符号链接。
    • 当你在终端中使用 gcc 命令时,实际上是在调用 LLVM 的 Clang 编译器。

在 macOS 中,由于默认情况下系统使用 LLVM 的 Clang 作为 C/C 编译器,gcc 实际上是一个指向 Clang 的符号链接。但是,为了兼容性和一些历史原因,gfortran 通常仍然是 GNU 的 Fortran 编译器。

如果我们使用Homebrew安装gcc

很简单的命令如下所示:

代码语言:javascript复制
 % 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



	

0 人点赞