当我试图安装最新版本的compass (https://rubygems.org/gems/compass/versions/1.0.0.alpha.17)时,我得到以下错误。

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

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

    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb
checking for ffi.h... no
checking for ffi.h in /usr/local/include,/usr/include/ffi... yes
checking for ffi_call() in -lffi... yes
checking for ffi_prep_closure()... yes
checking for ffi_raw_call()... no
checking for rb_thread_blocking_region()... yes
checking for rb_thread_call_with_gvl()... yes
checking for rb_thread_call_without_gvl()... yes
checking for ffi_prep_cif_var()... no
creating extconf.h
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling AbstractMemory.c
compiling ArrayType.c
compiling Buffer.c
compiling Call.c
Call.c:303:5: warning: implicit declaration of function 'rb_thread_call_without_gvl' is invalid in C99 [-Wimplicit-function-declaration]
    rbffi_thread_blocking_region(call_blocking_function, data, (void *) -1, NULL);
    ^
./Thread.h:78:39: note: expanded from macro 'rbffi_thread_blocking_region'
# define rbffi_thread_blocking_region rb_thread_call_without_gvl
                                      ^
1 warning generated.
compiling ClosurePool.c
compiling DataConverter.c
DataConverter.c:43:1: warning: control may reach end of non-void function [-Wreturn-type]
}
^
1 warning generated.
compiling DynamicLibrary.c
compiling ffi.c
compiling Function.c
Function.c:479:33: warning: incompatible pointer types passing 'VALUE (void *)' to parameter of type 'void *(*)(void *)' [-Wincompatible-pointer-types]
        rb_thread_call_with_gvl(callback_with_gvl, &cb);
                                ^~~~~~~~~~~~~~~~~
Function.c:102:46: note: passing argument to parameter 'func' here
extern void *rb_thread_call_with_gvl(void *(*func)(void *), void *data1);
                                             ^
Function.c:563:9: warning: implicit declaration of function 'rb_thread_call_without_gvl' is invalid in C99 [-Wimplicit-function-declaration]
        rb_thread_call_without_gvl(async_cb_wait, &w, async_cb_stop, &w);
        ^
Function.c:738:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
3 warnings generated.
compiling FunctionInfo.c
compiling LastError.c
compiling LongDouble.c
compiling MappedType.c
compiling MemoryPointer.c
compiling MethodHandle.c
compiling Platform.c
compiling Pointer.c
compiling Struct.c
compiling StructByReference.c
compiling StructByValue.c
compiling StructLayout.c
compiling Thread.c
compiling Type.c
compiling Types.c
compiling Variadic.c
linking shared-object ffi_c.bundle
clang: error: unknown argument: '-multiply_definedsuppress' [-Wunused-command-line-argument-hard-error-in-future]
clang: note: this will be a hard error (cannot be downgraded to a warning) in the future
make: *** [ffi_c.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /Library/Ruby/Gems/2.0.0/gems/ffi-1.9.3 for inspection.
Results logged to /Library/Ruby/Gems/2.0.0/extensions/universal-darwin-13/2.0.0/ffi-1.9.3/gem_make.out

这是怎么回事?如何正确安装最新的指南针?


当前回答

在Mac OS X 10.9上,如果你尝试xcode-select——install,你会得到以下错误:

无法安装该软件,因为它当前不可用 软件更新服务器。

解决方案是直接从苹果网站https://developer.apple.com/downloads/index.action?name=for%20Xcode%20-下载命令行工具(OS X 10.9)

然后,您将能够安装命令行工具的最新版本。

其他回答

你可能需要安装苹果的命令行工具,默认情况下可能没有安装在你的系统上。我得到了同样的错误,但在遵循这里的任何说明之前,我安装了命令行工具(由于一个不相关的问题),当我再次尝试时,指南针安装没有问题。YMMV。

在优胜美地,你所要做的就是安装命令行工具。这样就有用了。

即使其他宝石安装好了。你必须运行xcode-select——install来安装gem compass。

祝你好运。

对于Mac OS:

我的错误是在新XCode安装后,我忘记在XCode -首选项-位置-命令行工具中选择选项(我有2个版本,后来我删除了一个)。也许它会帮助别人。

为了解决这个问题,我必须确保自己拥有最新版本的Ruby和gem update—system;然后,我必须确保Xcode和命令行工具已经安装:Xcode -select——install。

不知道为什么这些都没有被标记为正确答案,但我是通过谷歌搜索登陆这里的,所以我会把我知道的传递下去……

@paul_g的方法对我来说非常接近,我在Mac osx10.9 Retina上的步骤:

安装macports 安装rvm(稳定与ruby添加-不安全标志SSL相关的问题)$\curl -sSL -不安全https://get.rvm.io | bash -s稳定——ruby 重新启动终端/资源配置文件 运行rvm requirements——with-gcc=clang你不需要更新Ruby,因为你下载了最新的稳定版本 最后一步是运行gem install compass—pre