安装gem ffi -v '1.1.5' 在OSX 10.8操作系统上。

5

我一直在尝试通过以下方式在OSX 10.8上安装ffi:

gem install ffi -v '1.1.5'

随着结果的出现

ERROR:  Error installing ffi:
ERROR: Failed to build gem native extension.

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
checking for ffi.h... no
checking for ffi.h in /usr/local/include,/usr/include/ffi... no
checking for rb_thread_blocking_region()... no
checking for ruby_native_thread_p()... no
checking for rb_thread_call_with_gvl()... no
creating extconf.h
creating Makefile

make
mkdir -p "/Library/Ruby/Gems/1.8/gems/ffi-1.1.5/ext/ffi_c"/libffi-i386; (if [ ! -f       "/Library/Ruby/Gems/1.8/gems/ffi-1.1.5/ext/ffi_c"/libffi-i386/Makefile ]; then echo "Configuring libffi for i386"; cd "/Library/Ruby/Gems/1.8/gems/ffi-1.1.5/ext/ffi_c"/libffi-i386 && env CC=" xcrun cc" CFLAGS="-arch i386 " LDFLAGS="-arch i386" "/Library/Ruby/Gems/1.8/gems/ffi-1.1.5/ext/ffi_c/libffi"/configure --disable-static --with-pic=yes --disable-dependency-tracking --host=i386-apple-darwin > /dev/null; fi); env MACOSX_DEPLOYMENT_TARGET=10.4 make -C "/Library/Ruby/Gems/1.8/gems/ffi-1.1.5/ext/ffi_c"/libffi-i386
Configuring libffi for i386
configure: WARNING: if you wanted to set the --build type, don't use --host.
If a cross compiler is detected then cross compile mode will be used
configure: error: in `/Library/Ruby/Gems/1.8/gems/ffi-1.1.5/ext/ffi_c/libffi-i386':
configure: error: C compiler cannot create executables
See `config.log' for more details
make[1]: *** No targets specified and no makefile found.  Stop.
make: *** ["/Library/Ruby/Gems/1.8/gems/ffi-1.1.5/ext/ffi_c"/libffi-   i386/.libs/libffi_convenience.a] Error 2


Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/ffi-1.1.5 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/ffi-1.1.5/ext/ffi_c/gem_make.out

我曾试图按照以下两个链接中的方法解决问题,但都没有成功:

在安装 ffi (1.1.2) 时出现错误,导致 Bundler 无法继续

升级到 Mountain Lion 后,无法安装某些 gem

希望您能提供更好的解决方案。

3个回答

2

我的ffi安装失败了,错误信息与此相似:

mkdir -p "/Library/Ruby/Gems/1.8/gems/ffi-1.9.0/ext/ffi_c"/libffi-i386; (if [ ! -f "/Library/Ruby/Gems/1.8/gems/ffi-1.9.0/ext/ffi_c"/libffi-i386/Makefile ]; then echo "Configuring libffi for i386"; cd "/Library/Ruby/Gems/1.8/gems/ffi-1.9.0/ext/ffi_c"/libffi-i386 && env CC=" xcrun cc" CFLAGS="-arch i386 " LDFLAGS="-arch i386" "/Library/Ruby/Gems/1.8/gems/ffi-1.9.0/ext/ffi_c/libffi"/configure --disable-static --with-pic=yes --disable-dependency-tracking --host=i386-apple-darwin > /dev/null; fi); env MACOSX_DEPLOYMENT_TARGET=10.4 make -C "/Library/Ruby/Gems/1.8/gems/ffi-1.9.0/ext/ffi_c"/libffi-i386
Configuring libffi for i386
configure: WARNING: if you wanted to set the --build type, don't use --host.
    If a cross compiler is detected then cross compile mode will be used
configure: error: in `/Library/Ruby/Gems/1.8/gems/ffi-1.9.0/ext/ffi_c/libffi-i386':
configure: error: C compiler cannot create executables

我在命令中看到了xcrun cc,并尝试手动运行它,但苹果提示我还没有同意XCode命令行工具的许可协议。在sudo xcrun cc之后,安装成功。

$ xcrun cc
Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo.
$ sudo xcrun cc
You have not agreed to the Xcode license agreements. You must agree to both license agreements below in order to use Xcode.
Hit the Enter key to view the license agreements at '/Applications/Xcode.app/Contents/Resources/English.lproj/License.rtf'
...

```


这不仅发生在首次安装XCode之后,而且在任何时候苹果更改许可证时都会发生。因此,XCode更新可能会导致XCode工具停止工作,直到您接受新的许可协议。 - Technosophos

0

看起来 ffi 坚持构建 32 位版本,而您的系统正在运行 64 位。

有两种可能的继续方式:

  1. 尝试使用 gem 的最新版本 gem install ffi - 但这不一定有效 - 因为这需要在库中修复,
  2. 编译 32 位 ruby rvm install 1.9.3-n32 --32 - 但这也不一定有效,因为大多数库很可能已经编译为 64 位,所以它可能无法编译或编译并出现问题

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接