簡體   English   中英

Mac OS X R 錯誤“ld:警告:找不到選項的目錄”

[英]Mac OS X R error "ld: warning: directory not found for option"

我正在嘗試從源安裝 R package,但出現錯誤:

* installing *source* package ‘mclust’ ...
** package ‘mclust’ successfully unpacked and MD5 sums checked
** libs
gfortran-4.8   -fPIC  -g -O2  -c mclust.f -o mclust.o
gfortran-4.8   -fPIC  -g -O2  -c mclustaddson.f -o mclustaddson.o
clang -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o mclust.so mclust.o mclustaddson.o -L/Library/Frameworks/R.framework/Resources/lib -lRlapack -L/Library/Frameworks/R.framework/Resources/lib -lRblas -L/usr/local/lib/gcc/x86_64-apple-darwin13.0.0/4.8.2 -lgfortran -lquadmath -lm -L/usr/local/lib/gcc/x86_64-apple-darwin13.0.0/4.8.2 -lgfortran -lquadmath -lm -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
ld: warning: directory not found for option '-L/usr/local/lib/gcc/x86_64-apple-darwin13.0.0/4.8.2'
ld: warning: directory not found for option '-L/usr/local/lib/gcc/x86_64-apple-darwin13.0.0/4.8.2'
ld: library not found for -lquadmath
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mclust.so] Error 1
ERROR: compilation failed for package ‘mclust’
* removing ‘/Library/Frameworks/R.framework/Versions/3.3/Resources/library/mclust’
Warning in install.packages :
  installation of package ‘mclust’ had non-zero exit status

我沒有/usr/local/lib/gcc/x86_64-apple-darwin13.0.0 ,所以找不到它是有道理的。 我有/usr/local/lib/gcc/i686-apple-darwin11/usr/local/lib/gcc/4.8 (到 Homebrew 安裝的符號鏈接)。 它從哪里獲得x86_64-apple-darwin13.0.0

網上有很多類似錯誤的參考。 但是都和Xcode中的編譯有關,通過更新工程設置解決,這里不適用。

您需要修改~/.R/Makevars文件。 有關這方面的更多概述,請參閱: https ://cran.r-project.org/doc/manuals/r-release/R-admin.html#OS-X-packages

或者,@kevin-ushey 在Rcpp 警告中更深入地回答了這個問題:“directory not found for option '-L/usr/local/Cellar/gfortran/4.8.2/gfortran'”

發生的事情是您的代碼沒有在gcc下運行,而是被轉發到clang

您需要使用以下命令將~/.R/Makevars/中的編譯語句更改為gcc

VER=-5.3.0 
CC=gcc$(VER)
CXX=g++$(VER)
CFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
CXXFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
FLIBS=-L/usr/local/Cellar/gcc/5.3.0/lib/gcc/5

這假設您已經通過 homebrew 安裝了gcc

brew install gcc

(gfortran 現在在 brew 中附帶 gcc)

結合以前的解決方案和評論的額外幫助,以下解決方案在 Mac OS X High Sierra 上對我有用。

使用以下內容創建/編輯~/.R/Makevars

VER=-8
CC=gcc$(VER)
CXX=g++$(VER)
CXX11=g++$(VER)
CXX14=g++$(VER)
CXX17=g++$(VER)
CFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
CXXFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
FLIBS=-L/usr/local/Cellar/gcc/8.2.0/lib/gcc/8

注意,我正在使用自制軟件並安裝了 gcc 版本 8.2.0。

http://thecoatlessprofessor.com/programming/rcpp-rcpparmadillo-and-os-x-mavericks-lgfortran-and-lquadmath-error/您可以通過從http://r.research 下載可選的 gfortran 庫來解決此問題。 att.com/libs/並提取它們。 在命令行上執行此操作

curl -O http://r.research.att.com/libs/gfortran-4.8.2-darwin13.tar.bz2
sudo tar fvxz gfortran-4.8.2-darwin13.tar.bz2 -C /

我正在使用 MacOS Mojave (10.14.5) 和 R 4.0.0。 這里的問題是“CRAN R 4.0.0 和更高版本不再使用任何自定義編譯器”(參見此處),因此Makevars解決方案似乎不再起作用。

我的解決方案是從官方R-Project 網站下載並安裝 GNU Fortran 編譯器。 請注意,您還需要 Xcode 和 Xcode 命令行工具。

使用默認設置運行安裝程序后,gfortran 代碼的編譯工作沒有問題。

我在 MAC 上收到了同樣的錯誤。 我需要做的就是從https://cran.r-project.org/bin/macosx/tools/安裝 gfortran-6.1.pkg。 確保軟件包安裝在/usr/local/gfortran下,以便 R 可以找到它。

或者,您可以通過 homebrew 在終端中鍵入brew cask install gfortran來安裝它(它可能會詢問您的密碼)。

我有這個問題很長一段時間,在 Mac 上工作。 按照此頁面上的其他答案和其他問題,我做了以下事情,終於奏效了!

第 1 步- brew install gcc (它為我安裝了 gcc-11。如果以后對您有所不同,請將下面的 gcc-11 替換為相應的版本。您可以通過查看文件夾/usr/local/bin找到版本/usr/local/bin並在那里看到最新的 gcc 版本文件)

第 2 步- xcode-select --install (這將安裝 Xcode CLI)

第 3 步- ln -sf /usr/local/bin/gcc-11 /usr/local/bin/gcc (這會在 /usr/local/bin/ 下創建一個新的 gcc 符號鏈接。Source

第 4 步- 我沒有~/.R/Makevars文件。 哎呀,我什至沒有~./R文件夾。 制作文件夾和文件。 這是我在 Makevars 文件中寫的內容(請記住根據您擁有的版本在第一行和最后一行更改 GCC 版本。還記得不要在第一行的最后一行中包含完整的版本號。只是整體版本號——在我的例子中是 11)——

VER=-11
CC=gcc$(VER)
CXX=g++$(VER)
CXX11=g++$(VER)
CXX14=g++$(VER)
CXX17=g++$(VER)
CFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
CXXFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
FLIBS=-L/usr/local/Cellar/gcc/11.2.0_3/lib/gcc/11

現在重新啟動,瞧! 有用。

我有 Mac OS Catalina,在我安裝 Homebrew 的情況下,最新的 gcc 和 Gfortran 8.2.0 解決了這個問題。

就我而言,我將這個答案這個答案結合起來,在~./R/.Makevars -file 中生成以下代碼。

touch ~./R/.Makevars

(因為那里不存在)

open -a BBEdit ~./R/.Makevars

(我使用BBEdit作為文本編輯器)

將以下行添加到Makevars文件:

VER=-11
CC=gcc$(VER)
CXX=g++$(VER)
CFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
CXXFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
# FLIBS=-L/usr/local/Cellar/gcc/11.1.0_1/lib/gcc/11
# FLIBS = -L`gfortran -print-file-name=libgfortran.dylib | xargs dirname`
FLIBS=`gfortran -print-search-dirs | grep ^libraries: | sed 's|libraries: =||' | sed 's|:| -L|g' | sed 's|^|-L|'`

這兩行是@KevinUshy建議的。

# FLIBS=-L/usr/local/Cellar/gcc/11.1.0_1/lib/gcc/11
# FLIBS = -L`gfortran -print-file-name=libgfortran.dylib | xargs dirname`

我將這些注釋掉了,因為我認為最后一行可能效果最好。

兩個筆記。

我已經安裝了brew並且我使用brew使用命令brew install gcc gcc

我使用brew info gcc找出版本命名,它給了我11.1.0_1 ,但它鏈接為gcc-11 ,因此.Makevars -file 中的VER=-11

希望這對其他人有幫助。

解決方案是使用 Homebrew 重新安裝有問題的軟件包。

$ brew uninstall --ignore-dependencies --force openssl
$ brew install openssl

$ brew uninstall --ignore-dependencies --force readline  
$ brew install readline

挖掘這個主題,如果您嘗試了這些以及與此錯誤相關的許多其他方法但沒有成功,我強烈建議您檢查您的 OSx - 以防萬一 - 刪除了.zshrc文件。

如果是這種情況,您應該在根目錄中再次創建此文件。 在終端中輸入:

  • touch .zshrc

其次是

  • openssl_prefix=$(brew --prefix openssl) printf "CFLAGS=-I$openssl_prefix/include \nLDFLAGS=-L$openssl_prefix/lib"

輸出示例:

  • CFLAGS=-I/usr/local/opt/openssl@3/include LDFLAGS=-L/usr/local/opt/openssl@3/lib

將它們添加到zshrc文件內容中,運行

  • source .zshrc .zshrc 來刷新文件,僅此而已!

在 macOS 12.4 上使用 R 時遇到了這個問題。 這是由我的~/.R/Makevars文件中的舊條目引起的。 一旦我將所有內容都注釋掉,一切都編譯得很好。 我有XCodebrew install gcc活動。

對於更高版本的 R(R 4.0 及更高版本)和更高版本的操作系統,此問題的推薦修復方法似乎是通過 rtools 安裝 gfortran(參見此處,已在 @lks_swrx 的答案中提到)。

遵循這些說明時,我遇到了另一個問題,因為我的計算機使用 Apple Silicon 芯片(不再是 Intel),我想在這里添加一個解決方案:

  1. rtools下載適當的 gfortran tarball
  2. 運行tar fxz gfortran-12.0.1-20220312-is-darwin20-arm64.tar.xz -C /
  3. 通過將此行添加到您的.zshrc文件,將其添加到您的路徑:
    nano.zshrc (或任何你用作文本編輯器的東西)
    export PATH=$PATH:/opt/R/arm64/gfortran/bin

到目前為止,一切都很好; 但是將我帶到這里的DESeq2的安裝仍然無法正常工作,因為 R 找不到庫。 這是修復:

  1. /usr/local中創建指向 gfortran 庫的符號鏈接,以便 R 可以找到它:
    ln -s /opt/R/arm64/gfortran /usr/local/gfortran (可能需要sudo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM