【问题标题】:failed to build native extension for bcrypt-ruby gem under cygwin on windows xp未能在 windows xp 上的 cygwin 下为 bcrypt-ruby gem 构建本机扩展
【发布时间】:2012-10-24 20:46:07
【问题描述】:

我正在 Windows XP 上为 Rails 应用程序设置测试代理。

为了加强代理之间的一致性,我通过带有 Cygwin 的 RVM 的 Bundler 安装它。

以下是在项目目录中运行 bundle install 的结果(编辑:注意运行 gem install bcrypt-ruby 产生相同的输出):

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

    /goBaltoEngineering/.rvm/rubies/ruby-1.9.3-p125/bin/ruby.exe extconf.rb
creating Makefile

make
compiling bcrypt_ext.c
compiling crypt.c
compiling crypt_blowfish.c
compiling crypt_gensalt.c
compiling wrapper.c
In file included from wrapper.c:27:0:
/goBaltoEngineering/.rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1/ruby/backward/util.h:2:2: warning: #warning use "ruby/util.h" instead of bare     "util.h"
linking shared-object bcrypt_ext.so
bcrypt_ext.o:bcrypt_ext.c:(.text+0x29): undefined reference to `_ruby_bcrypt'
collect2: ld returned 1 exit status
Makefile:207: recipe for target `bcrypt_ext.so' failed
make: *** [bcrypt_ext.so] Error 1


Gem files will remain installed in /goBaltoEngineering/.rvm/gems/ruby-1.9.3-p125@togo/gems/bcrypt-ruby-3.0.1 for inspection.
Results logged to /goBaltoEngineering/.rvm/gems/ruby-1.9.3-p125@togo/gems/bcrypt-ruby-3.0.1/ext/mri/gem_make.out
An error occurred while installing bcrypt-ruby (3.0.1), and Bundler cannot continue.
Make sure that `gem install bcrypt-ruby -v '3.0.1'` succeeds before bundling.

cygwin gcc 包已安装:

$ whereis gcc
gcc: /bin/gcc.exe /usr/bin/gcc.exe /lib/gcc /usr/lib/gcc /cygdrive/e/Cygwin/bin/gcc.exe /usr/share/man/man1/gcc.1.gz


$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-pc-cygwin/4.5.3/lto-wrapper.exe
Target: i686-pc-cygwin
Configured with: /gnu/gcc/releases/respins/4.5.3-3/gcc4-4.5.3-3/src/gcc-4.5.3/configure    --srcdir=/gnu/gcc/releases/respins/4.5.3-3/gcc4-4.5.3-3/src/gcc-4.5.3 --prefix=/usr --exec-  prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib -- datadir=/usr/share --localstatedir=/var --sysconfdir=/etc --datarootdir=/usr/share -- docdir=/usr/share/doc/gcc4 -C --datadir=/usr/share --infodir=/usr/share/info -- mandir=/usr/share/man -v --with-gmp=/usr --with-mpfr=/usr --enable-bootstrap --enable-version-specific-runtime-libs --libexecdir=/usr/lib --enable-static --enable-shared --enable-shared-libgcc --disable-__cxa_atexit --with-gnu-ld --with-gnu-as --with-dwarf2 --disable-sjlj-exceptions --enable-languages=ada,c,c++,fortran,java,lto,objc,obj-c++ --enable-graphite --enable-lto --enable-java-awt=gtk --disable-symvers --enable-libjava --program-suffix=-4 --enable-libgomp --enable-libssp --enable-libada --enable-threads=posix --with-arch=i686 --with-tune=generic --enable-libgcj-sublibs CC=gcc-4 CXX=g++-4 CC_FOR_TARGET=gcc-4 CXX_FOR_TARGET=g++-4 GNATMAKE_FOR_TARGET=gnatmake GNATBIND_FOR_TARGET=gnatbind --with-ecj-jar=/usr/share/java/ecj.jar
Thread model: posix
gcc version 4.5.3 (GCC)

和 bcrypt 一样:

 $ whereis bcrypt
 bcrypt: /bin/bcrypt.exe /usr/bin/bcrypt.exe /cygdrive/e/Cygwin/bin/bcrypt.exe /usr/share/man/man1/bcrypt.1.gz

 bcrypt -v
 bcrypt: unknown option -- v
 Usage is: /bin/bcrypt -[orc][-sN] file1 file2..
   -o Write output to standard out
   -r Do NOT remove input files after processing
   -c Do NOT compress files before encryption
   -sN How many times to overwrite input files with random data

进一步研究的结果:

设置

        rvm use system

(在我的例子中是 1.9.3-p286)允许 bcrypt-ruby 顺利安装

通过rvm安装1.9.3-p286并设置

        rvm use 1.9.3-p286

导致相同的(除了 ruby​​ 版本)错误消息。

在 Mac OS X 上安装可以在众多开发人员站和多个 Mac 代理上顺利运行。

所有这些都表明错误出现在 rvm 和 cygwin 的交集处。

我已经尝试了我能想到的一切。任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 你应该向 ruby​​ 团队报告你的错误:bugs.ruby-lang.org
  • 只是为了满足我的好奇心,为什么你认为这是 ruby​​ 的错误而不是 RVM/Cygwin/Bcrypt 的错误?谢谢!
  • 无论哪种情况,我都在这里报告过:bugs.ruby-lang.org/issues/7227

标签: ruby cygwin rvm bundler bcrypt-ruby


【解决方案1】:

我通过以下方式躲过了它: 为我的 Ruby 版本安装 Rubyinstaller:

http://rubyinstaller.org/

从我的路径中删除 Cygwin(右键单击我的电脑 > 属性 > 高级 > 环境变量)。

下载 Git Bash 并按照此处的说明设置 ssh:

http://mrsimonelliott.com/blog/setting-git-and-github-windows-xp

已下载 Ruby 安装程序开发工具包

http://rubyinstaller.org/add-ons/devkit/

下载的QT

http://qt-project.org/downloads (mingw 目录在我安装 Git 的地方)

将 QT/bin 添加到路径中。

我只使用 Ruby 版本,但我想当这成为问题时,我总是可以使用 Pik。

顺便说一句,我相当确信这是一个 RVM 问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多