在Mac OS X 10.10.5 Yosemite上运行的R 3.2.2中的FFTW链接问题

时间:2015-09-18 23:08:02

标签: r osx-yosemite fftw

我正在尝试解决对于应该在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

我怎样才能做出正确的链接并解决问题?

提前致谢

1 个答案:

答案 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。您应该可以使用

卸载此版本的FFTW
$ 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的问题,并按预期进行安装。

除了

sudobrew link一起使用永远是正确的选项。链接Homebrew公式的正确方法如上所述。

  1. 更正来自brew doctor
  2. 的所有警告
  3. 检查brew link --overwrite --dry-run将覆盖的内容
  4. 将公式与brew linkbrew link --overwrite
  5. 相关联