首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rcpp警告:“选项'-L/usr/local/Cellar/gfortran/4.8.2/gfortran'”找不到目录

Rcpp警告:“选项'-L/usr/local/Cellar/gfortran/4.8.2/gfortran'”找不到目录
EN

Stack Overflow用户
提问于 2015-05-01 17:42:03
回答 2查看 8.7K关注 0票数 13

这个问题与其他一些问题有关,比如RccpArmadillo元级乘法

然而,我的设置是这样的,我不知道我需要编辑/模拟链接才能让Rccp运行而不给我警告。

我在使用最新R版本的Mac10.9(小牛)上。

在开始时,尝试从这里获得的以下代码RccpvsR,我得到了一个错误:

代码语言:javascript
复制
ld: library not found for -lgfortran
clang: error: linker command failed with exit code 1 (use -v to see invocation)`  

然后,基于RccpArmadillo,我做了以下工作:

代码语言:javascript
复制
# Update FLIBS in ~/.R/Makevars
FLIBS=-L/usr/local/Cellar/gfortran/4.8.2/gfortran
#Re-Install from source
install.packages(c("Rcpp","RcppArmadillo","inline"),type="source")
#Restart R

这只是尝试一下,因为我没有/usr/local/Cellar/gfortran/目录。实际上,我的所有libgfortran*文件都在这里(在macports上):

代码语言:javascript
复制
>ls /opt/local/lib/gcc48/libgfortran.*
/opt/local/lib/gcc48/libgfortran.3.dylib       /opt/local/lib/gcc48/libgfortran.dylib
/opt/local/lib/gcc48/libgfortran.a       /opt/local/lib/gcc48/libgfortran.spec

这里,/opt/local/lib/gcc48/gcc/x86_64-apple-darwin13/4.8.3/libgfortranbegin.a和我在任何地方都没有gfortran文件。

然后我又一次尝试了代码RccpvsR,令人惊讶的是,它成功了!除了我收到警告外:

代码语言:javascript
复制
ld: warning: directory not found for option '-L/usr/local/Cellar/gfortran/4.8.2/gfortran' 

当然,它并不存在,但是由代码cosineRcpp创建的函数运行时没有问题。

因此,问一问是否有人知道我是否必须将libgfortran文件在/opt/local/lib/gcc48/中模拟为:

代码语言:javascript
复制
ln -s /opt/local/lib/gcc48/libgfortran.* /usr/local/lib/

然后删除/编辑行:

代码语言:javascript
复制
FLIBS=-L/usr/local/Cellar/gfortran/4.8.2/gfortran

~/.R/Makevars

或者如果我要安装新的东西。

提前谢谢你的时间!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-01 19:37:20

简短回答

只要把通往libgfortran的路径放到FLIBS中就可以了。

代码语言:javascript
复制
FLIBS=-L/opt/local/lib/gcc48/

或者,如果您对此感到满意,可以将其中的文件符号链接到/usr/local/lib/。但是,这个解决方案非常脆弱,因为如果您更新gfortran或将它移到另一个目录,很容易忘记更新这个路径。

稍长的答案

您可以查询gfortranlibgfortran.dylib路径。

代码语言:javascript
复制
gfortran -print-file-name=libgfortran.dylib

您只需在Makevars文件中直接执行此操作即可。

代码语言:javascript
复制
FLIBS = -L`gfortran -print-file-name=libgfortran.dylib | xargs dirname`

过时的长答案

尝试直接从FLIBS输出解析适当的gfortran

首先是一些背景。/usr/local/Cellar目录是OS的包管理器自制使用的默认路径。

现在,Homebrew将gfortran及其相关库作为gcc包的一部分提供,因此它安装FORTRAN库的路径已经发生了变化。但是,可以(一般情况下)使用gfortran -print-search-dirs发现它们。例如,在我的系统里,

代码语言:javascript
复制
gfortran -print-search-dirs

会给我

代码语言:javascript
复制
install: /usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/
programs: =/usr/local/Cellar/gcc/4.9.2_1/libexec/gcc/x86_64-apple-darwin14.0.0/4.9.2/:/usr/local/Cellar/gcc/4.9.2_1/libexec/gcc/x86_64-apple-darwin14.0.0/4.9.2/:/usr/local/Cellar/gcc/4.9.2_1/libexec/gcc/x86_64-apple-darwin14.0.0/:/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/:/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/:/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/../../../../../../x86_64-apple-darwin14.0.0/bin/x86_64-apple-darwin14.0.0/4.9.2/:/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/../../../../../../x86_64-apple-darwin14.0.0/bin/
libraries: =/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/:/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/../../../../../../x86_64-apple-darwin14.0.0/lib/x86_64-apple-darwin14.0.0/4.9.2/:/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/../../../../../../x86_64-apple-darwin14.0.0/lib/:/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/../../../x86_64-apple-darwin14.0.0/4.9.2/:/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/../../../:/lib/x86_64-apple-darwin14.0.0/4.9.2/:/lib/:/usr/lib/x86_64-apple-darwin14.0.0/4.9.2/:/usr/lib/

分裂,用R印刷,我看到:

代码语言:javascript
复制
[[1]]
[1] "/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/"

[[2]]
[1] "/usr/local/Cellar/gcc/4.9.2_1/libexec/gcc/x86_64-apple-darwin14.0.0/4.9.2/"                                                                                    
[2] "/usr/local/Cellar/gcc/4.9.2_1/libexec/gcc/x86_64-apple-darwin14.0.0/4.9.2/"                                                                                    
[3] "/usr/local/Cellar/gcc/4.9.2_1/libexec/gcc/x86_64-apple-darwin14.0.0/"                                                                                          
[4] "/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/"                                                                                
[5] "/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/"                                                                                      
[6] "/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/../../../../../../x86_64-apple-darwin14.0.0/bin/x86_64-apple-darwin14.0.0/4.9.2/"
[7] "/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/../../../../../../x86_64-apple-darwin14.0.0/bin/"                                

[[3]]
[1] "/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/"                                                                                
[2] "/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/../../../../../../x86_64-apple-darwin14.0.0/lib/x86_64-apple-darwin14.0.0/4.9.2/"
[3] "/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/../../../../../../x86_64-apple-darwin14.0.0/lib/"                                
[4] "/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/../../../x86_64-apple-darwin14.0.0/4.9.2/"                                       
[5] "/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/../../../"                                                                       
[6] "/lib/x86_64-apple-darwin14.0.0/4.9.2/"                                                                                                                         
[7] "/lib/"                                                                                                                                                         
[8] "/usr/lib/x86_64-apple-darwin14.0.0/4.9.2/"                                                                                                                     
[9] "/usr/lib/"  

在我的例子中,libgfortran实际上住在这里:

代码语言:javascript
复制
/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/../../../

这就是我们想要传递到FLIBS的路径。但是,把它拔出来有点痛苦,所以让我们告诉FLIBS使用gfortran通常使用的任何路径

代码语言:javascript
复制
gfortran -print-search-dirs | grep ^libraries: | sed 's|libraries: =||'

这很好,但我们希望库路径采用适合编译器的格式;即,使用-L。让我们用sed来做吧

代码语言:javascript
复制
gfortran -print-search-dirs | grep ^libraries: | sed 's|libraries: =||' | sed 's|:| -L|g' | sed 's|^|-L|'

此输出(为可读性而拆分)

代码语言:javascript
复制
-L/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/
-L/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/../../../../../../x86_64-apple-darwin14.0.0/lib/x86_64-apple-darwin14.0.0/4.9.2/
-L/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/../../../../../../x86_64-apple-darwin14.0.0/lib/
-L/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/../../../x86_64-apple-darwin14.0.0/4.9.2/
-L/usr/local/Cellar/gcc/4.9.2_1/lib/gcc/4.9/gcc/x86_64-apple-darwin14.0.0/4.9.2/../../../
-L/lib/x86_64-apple-darwin14.0.0/4.9.2/
-L/lib/
-L/usr/lib/x86_64-apple-darwin14.0.0/4.9.2/
-L/usr/lib/

总之,这意味着至少在OS上,以下内容应该适用于您,但是(通常)应该在任何带有gfortran的平台上工作(只要它在PATH上):

代码语言:javascript
复制
FLIBS=`gfortran -print-search-dirs | grep ^libraries: | sed 's|libraries: =||' | sed 's|:| -L|g' | sed 's|^|-L|'`

这并不完美,例如,如果你的道路上有空位,它就会失败--如果你这样做了,1)你应该得到你应得的东西;2)它也应该是一个“相对”容易的解决办法。

票数 27
EN

Stack Overflow用户

发布于 2016-09-07 14:34:02

@kevin(至少我需要这样做,我使用Prezto)对答案的一个小改动是在grep '^libraries:'中添加单引号,结果是:

代码语言:javascript
复制
FLIBS=`gfortran -print-search-dirs | grep '^libraries:' | sed 's|libraries: =||' | sed 's|:| -L|g' | sed 's|^|-L|'`

将这一行添加到我的~/.R/Makevars文件中就成功了!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29992066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档