我目前正在尝试安装一些Ruby Gems,这些Ruby Gems需要在Windows 10上正确安装并链接fftw3库。这是Linux上的单行修复程序,因此,我对此颇为恼火。
我已经安装了Ruby 2.2.4(64位)和64位Devkit。
运行gem install fftw3
会产生以下结果:
Temporarily enhancing PATH to include DevKit...
Building native extensions. This could take a while...
ERROR: Error installing fftw3:
ERROR: Failed to build gem native extension.
current directory: C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/fftw3-0.3/ext
C:/Ruby22-x64/bin/ruby.exe -r ./siteconf20180813-7456-1v4icuv.rb extconf.rb
checking for narray.h... yes
checking for narray_config.h... yes
checking for fftw3.h... yes
checking for main() in -lfftw3... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You
may need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=C:/Ruby22-x64/bin/$(RUBY_BASE_NAME)
--with-narray-dir
--without-narray-dir
--with-narray-include
--without-narray-include=${narray-dir}/include
--with-narray-lib
--without-narray-lib=${narray-dir}/lib
--with-fftw3-dir
--without-fftw3-dir
--with-fftw3-include
--without-fftw3-include=${fftw3-dir}/include
--with-fftw3-lib
--without-fftw3-lib=${fftw3-dir}/lib
--with-fftw3lib
--without-fftw3lib
** configure error **
Header fftw3.h or the compiled fftw3 library is not found.
If you have the library installed under /fftw3dir (that is, fftw3.h is
in /fftw3dir/include and the library in /fftw3dir/lib/),
try the following:
% ruby extconf.rb --with-fftw3-dir=/fftw3dir
Alternatively, you can specify the two directory separately
with --with-fftw3-include and --with-fftw3-lib.
To see why this extension failed to compile, please check the mkmf.log which
can be found here:
C:/Ruby22-x64/lib/ruby/gems/2.2.0/extensions/x64-mingw32/2.2.0/fftw3-0.3/mkmf.log
extconf failed, exit code 1
Gem files will remain installed in C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/fftw3-0.3 for inspection.
Results logged to C:/Ruby22-x64/lib/ruby/gems/2.2.0/extensions/x64-mingw32/2.2.0/fftw3-0.3/gem_make.out
这里有很多...到目前为止,我已经能够通过读取mkmf.log文件并将标头放置在gem安装搜索的路径中来使fftw3.h文件正确链接。我尝试使用更多的命令行选项ruby extconf.rb <opts>
来生成Makefile(收到类似的错误),并将DLL放置在System32和SysWOW64文件夹中。
使用ruby-termios gem填充相同的错误,但它正在查找termios.h。这使我相信需要Devkit安装的gem可能有问题,因此我也尝试重新安装它,但是没有运气。
所以我有几个问题:
为什么Devkit gems搜索与要安装的gem相匹配的头文件? (例如fftw3查找fftw3.h,ruby-termios查找termios.h)这些代码是否应与gem捆绑在一起?
libfftw3是否可能缺少main()函数?我不确定安装命令是否可以找到该dll,或者该dll缺少main()。如果是这样,该问题的解决方法是什么? (我不想从extconf.rb文件中删除have_library(“ fftw3”)调用,因为这感觉很脏而且周围都是错误的。)
有人知道此错误的解决方法吗?
很抱歉向您扔了很多东西,希望这很清楚。 预先感谢。
编辑:需要注意的几件事:
gem install
也可以选择安装--with-fftw3-dir =“ path” 答案 0 :(得分:0)
按顺序回答您的问题:
Init_gem_name
的入口点。除此之外,只要它符合C标准,并且extconfig.rb
被正确配置为告诉编译器在哪里可以找到源文件,一切就顺利了。任何C扩展都将至少具有一个标头来定义入口点,但是根据gem的功能,可能不包含标头。例如,如果编写使用OpenGL的gem,则不一定总是要包含gl.h
标头,因为默认情况下,它已经包含在Windows,OSX和Linux系统中(尽管通常已经过时)。libfft3
在安装gem之前已经安装在您的系统上,可以在其中找到它,否则它实际上在任何地方都没有定义它通过读取头文件认为具有的所有功能。 答案 1 :(得分:0)
这些步骤适用于Windows 10上具有Ruby 2.2.4和Devkit的64位操作系统。
运行Cygwin设置并选择mingw64-x86_64-fftw3(版本3.3.5)进行安装
将C:\cygwin64\usr\x86_64-w64-mingw32\sys-root\mingw\lib\libfftw3*
复制到
C:\fftw3\lib
将C:\cygwin64\usr\x86_64-w64-mingw32\sys-root\mingw\include\fftw3*
复制到
C:\fftw3\include
复制C:\COSMOS\Vendor\Ruby\lib\ruby\gems\2.2.0\gems\narray-0.6.1.2\src\libnarray.a
到C:\fftw3\lib
将narray.h
和narray_config.h
从<rubypath>\lib\ruby\gems\2.2.0\gems\narray-0.6.1.2\src
复制到C:\fftw3\include
运行gem install fftw3 -- --with-opt-dir=C:\fftw3
将C:\cygwin64\usr\x86_64-w64-mingw32\sys-root\mingw\bin
添加到PATH
这些步骤将允许安装需要fftw3
库的gem。您只需要在--with-opt-dir
gem install
选项