前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mac的homebrew会把gcc安装在哪里

mac的homebrew会把gcc安装在哪里

作者头像
生信菜鸟团
发布2024-01-14 21:27:45
2571
发布2024-01-14 21:27:45
举报
文章被收录于专栏:生信菜鸟团生信菜鸟团

终于遇到了大家“喜闻乐见”的 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
?  /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`).

如果解决前面的报错呢

首先需要定位到核心问题, 就是:

代码语言:javascript
复制
 '/opt/gfortran/lib/gcc/x86_64-apple-darwin20.0/12.2.0' not found

然后我们电脑里面确实是已经使用Homebrew安装gcc的时候有了所需要的库文件:

代码语言:javascript
复制
ls -lh /opt/homebrew/Cellar/gcc/13.2.0/lib/gcc/current

创建报错信息提示的那个缺失的文件夹,然后把库文件复制过去即可

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

最后就成功啦,如下所示:

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

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-01-14,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于Homebrew
  • Mac电脑里面的gfortran和gcc有什么关系呢
  • 如果我们使用Homebrew安装gcc
  • 如果解决前面的报错呢
  • 如果是其它操作系统呢
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com