我正在尝试解决对于应该在R 3.2.2中运行的程序包而言依赖于fftw的问题。包的作者声称这种依赖性不再存在,但是当我尝试安装包时,我收到以下输出
> install.packages("seewave")
Package which is only available in source form, and may need
compilation of C/C++/Fortran: ‘seewave’
Do you want to attempt to install these from sources?
y/n: y
installing the source package ‘seewave’
trying URL 'https://cran.rstudio.com/src/contrib/seewave_2.0.2.tar.gz'
Content type 'application/x-gzip' length 2485930 bytes (2.4 MB)
==================================================
downloaded 2.4 MB
* installing *source* package ‘seewave’ ...
** package ‘seewave’ successfully unpacked and MD5 sums checked
** libs
clang -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG
-I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include
-fPIC -Wall -mtune=core2 -g -O2 -c stft.c -o stft.o
stft.c:44:6: warning: unused variable 'i' [-Wunused-variable]
int i = 0;
^
1 warning generated.
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 seewave.so stft.o -lfftw3 -lsndfile
-F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
ld: library not found for -lfftw3
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [seewave.so] Error 1
ERROR: compilation failed for package ‘seewave’
* removing /Library/Frameworks/R.framework/Versions/3.2/Resources/library/seewave’
Warning in install.packages :
installation of package ‘seewave’ had non-zero exit status
名为fftw的软件包已经在版本1.0.3中的R中。但是,当我进入终端并输入以下命令时,我收到的输出指向缺少fftw的“链接”
$ brew install fftw
Warning: fftw-3.3.4_1 already installed, it's just not linked
有趣的是(或愚蠢地),在一个肯定不正确的路径中有一个fftw3文件夹,但没有fftw3.3.4_1的路径
/Users/mario/fftw-3.3.3
我怎样才能做出正确的链接并解决问题?
提前致谢
答案 0 :(得分:1)
由于存在/Users/mario/fftw-3.3.3
以及Homebrew版本未链接的事实,您可能以前尝试过从源安装FFTW。如果您之前已从源brew doctor
安装了FFTW,则应输出与
Warning: Unbrewed header files were found in /usr/local/include.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.
Unexpected header files:
/usr/local/include/fftw3.h
注意: 正确安装应该有更多警告。
下载并解压缩FFTW时,生成的文件夹名称为fftw-<major>.<minor>.<patch>
。这很可能是/Users/mario/fftw-3.3.3
。您应该可以使用
$ cd /Users/mario/fftw-3.3.3
$ make uninstall
$ cd ..
$ rm -rf fftw-3.3.3/
注意: sudo
可能需要,具体取决于您的安装方式。如果不存在makefile
,则需要使用
$ ./configure
$ make uninstall
现在brew doctor
不应输出有关FFTW的任何内容,您可以安全地执行
$ brew link fftw
链接FFTW。如果,在可能的情况下,这仍然无效,您可以使用
$ brew link --overwrite --dry-run fftw
由于--dry-run
,这将告诉您Homebrew需要覆盖哪些文件才能正确链接FFTW。
$ brew link --overwrite fftw
然后应该可以安全运行,因为Homebrew的设计不会弄乱你的系统。现在应解决在安装R软件包时连接FFTW的问题,并按预期进行安装。
将sudo
与brew link
一起使用永远是正确的选项。链接Homebrew公式的正确方法如上所述。
brew doctor
brew link --overwrite --dry-run
将覆盖的内容brew link
或brew link --overwrite