[英]Problem installing R package “ld: warning: directory not found for option ”
[英]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 /
我在 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
文件中的舊條目引起的。 一旦我將所有內容都注釋掉,一切都編譯得很好。 我有XCode
和brew install gcc
活動。
對於更高版本的 R(R 4.0 及更高版本)和更高版本的操作系統,此問題的推薦修復方法似乎是通過 rtools 安裝 gfortran(參見此處,已在 @lks_swrx 的答案中提到)。
遵循這些說明時,我遇到了另一個問題,因為我的計算機使用 Apple Silicon 芯片(不再是 Intel),我想在這里添加一個解決方案:
tar fxz gfortran-12.0.1-20220312-is-darwin20-arm64.tar.xz -C /
.zshrc
文件,將其添加到您的路徑:nano.zshrc
(或任何你用作文本編輯器的東西)export PATH=$PATH:/opt/R/arm64/gfortran/bin
到目前為止,一切都很好; 但是將我帶到這里的DESeq2
的安裝仍然無法正常工作,因為 R 找不到庫。 這是修復:
/usr/local
中創建指向 gfortran 庫的符號鏈接,以便 R 可以找到它:ln -s /opt/R/arm64/gfortran /usr/local/gfortran
(可能需要sudo
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.