缺少必需的库和/或标头,宝石安装失败

时间:2018-08-13 21:54:22

标签: ruby rubygems devkit

我目前正在尝试安装一些Ruby Gems,这些Ruby Gems需要在Windows 10上正确安装并链接fftw3库。这是Linux上的单行修复程序,因此,我对此颇为恼火。

  • fftw3〜> 0.3
  • 卷积器〜> 0.3.1

我已经安装了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可能有问题,因此我也尝试重新安装它,但是没有运气。

所以我有几个问题:

  1. 为什么Devkit gems搜索与要安装的gem相匹配的头文件? (例如fftw3查找fftw3.h,ruby-termios查找termios.h)这些代码是否应与gem捆绑在一起?

  2. libfftw3是否可能缺少main()函数?我不确定安装命令是否可以找到该dll,或者该dll缺少main()。如果是这样,该问题的解决方法是什么? (我不想从extconf.rb文件中删除have_library(“ fftw3”)调用,因为这感觉很脏而且周围都是错误的。)

  3. 有人知道此错误的解决方法吗?

很抱歉向您扔了很多东西,希望这很清楚。 预先感谢。

编辑:需要注意的几件事:

  • 在Windows上,您可以在Cygwin的安装过程中安装fftw3库
  • gem install也可以选择安装--with-fftw3-dir =“ path”

2 个答案:

答案 0 :(得分:0)

按顺序回答您的问题:

  1. (实际上是几个问题)通常是的,命名约定当然会传达一些有意义的东西,但这不是必需的。作者很有可能更改了文件名。 Ruby只是在寻找必须定义Init_gem_name的入口点。除此之外,只要它符合C标准,并且extconfig.rb被正确配置为告诉编译器在哪里可以找到源文件,一切就顺利了。任何C扩展都将至少具有一个标头来定义入口点,但是根据gem的功能,可能不包含标头。例如,如果编写使用OpenGL的gem,则不一定总是要包含gl.h标头,因为默认情况下,它已经包含在Windows,OSX和Linux系统中(尽管通常已经过时)。
  2. 这种可能性很小,我只想说不。
  3. 您不需要“变通方法”,只需要按照给出的指示使用宝石即可。并非所有的gem都是独立的,没有依赖性的库,尤其是包裹库的所有库。这个特殊的gem要求libfft3在安装gem之前已经安装在您的系统上,可以在其中找到它,否则它实际上在任何地方都没有定义它通过读取头文件认为具有的所有功能。

答案 1 :(得分:0)

这些步骤适用于Windows 10上具有Ruby 2.2.4和Devkit的64位操作系统。

  1. 运行Cygwin设置并选择mingw64-x86_64-fftw3(版本3.3.5)进行安装

  2. C:\cygwin64\usr\x86_64-w64-mingw32\sys-root\mingw\lib\libfftw3*复制到 C:\fftw3\lib

  3. C:\cygwin64\usr\x86_64-w64-mingw32\sys-root\mingw\include\fftw3*复制到 C:\fftw3\include

  4. 复制C:\COSMOS\Vendor\Ruby\lib\ruby\gems\2.2.0\gems\narray-0.6.1.2\src\libnarray.aC:\fftw3\lib

  5. narray.hnarray_config.h<rubypath>\lib\ruby\gems\2.2.0\gems\narray-0.6.1.2\src复制到C:\fftw3\include

  6. 运行gem install fftw3 -- --with-opt-dir=C:\fftw3

  7. C:\cygwin64\usr\x86_64-w64-mingw32\sys-root\mingw\bin添加到PATH

这些步骤将允许安装需要fftw3库的gem。您只需要在--with-opt-dir

期间指定gem install选项