创建gem本地扩展失败(正在安装Compass)

当我试图安装最新版本的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

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

379051 次浏览

嗨,这是一个挑战,让它在Mac上工作,所以不管怎样,这里有一个解决方案

  1. 安装macports
  2. 安装数位视讯
  3. 重启终端
  4. 运行rvm requirements,然后运行rvm install 2.1
  5. 最后一步是运行gem install compass --pre

我不确定,但是Mavericks上的ruby版本不支持本地扩展等等…所以如果你指向其他ruby版本,比如我做的“2.1”,它可以正常工作。

我为你这个问题纠结了大约3个小时。从Compass 1.0.alpha19开始,该需求适用于rvm版本1.9.3。

有几个未收集的帖子,但对我有用的是以下几点:

  1. sudo gem uninstall sass
  2. sudo gem uninstall compass
  3. rvm install ruby-1.9.3-p448
  4. sudo gem install sass --pre
  5. sudo gem install compass --pre

这样就成功了。希望它也适用于你!

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

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

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

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

试试这个,然后再试着安装指南针

apt-get install ruby-dev

为了解决这个问题,我必须确保我有最新版本的Ruby和gems gem update --system;然后,我必须确保Xcode &命令行工具被安装:xcode-select --install

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

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

祝你好运。

为了在Mac OS X 10.10 (Yosemite)上安装指南针,必须执行以下操作:

1. 设置Ruby环境

  • 确保ruby已安装并更新:ruby -v
  • 更新gem的sudo gem update --system

2. 搭建MAC环境

安装Xcode命令行工具这是安装Compass的关键。

xcode-select --install

安装Xcode命令行工具是Compass在OS X上工作的关键

3.安装指南针

sudo gem install compass

你可以试试在Debian上用

sudo apt-get install gcc ruby-dev rubygems compass

Fedora, Centos

yum -y install gcc ruby-devel rubygems compass

这对我很管用。

最好的方法是sudo apt-get install ruby-compass安装指南针。

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

无法安装该软件,因为它当前不可用

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

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

为了在Yosemite上安装Compass,你需要设置Ruby环境并安装Xcode命令行工具。 但最重要的是,在更新Xcode之后,请务必启动Xcode应用程序并接受苹果的许可条款。完成组件的安装。 之后,你可以安装Compass: sudo gem install Compass

在ubuntu 14.04中,当执行安装rubygems时,出现一个错误

E:软件包“rubygems”没有安装候选

服从命令解决问题。

Sudo apt-get安装GCC ruby-devel rubygems-集成ruby-compass

我在Linux Mint上也有同样的问题,但我能够通过卸载ruby并重新安装来修复它。

ruby:卸载

sudo apt-get remove ruby

它报告了一些ruby包,比如:

Package 'ruby' is not installed, so not removed
The following packages were automatically installed and are no longer required:
libruby2.2 ruby-chunky-png ruby-sass rubygems-integration
Use 'apt-get autoremove' to remove them.

卸载剩余软件包*

apt-get autoremove

重新安装ruby

sudo apt-get install ruby2.2

安装指南针

sudo gem install compass

最后一条命令执行成功。

brew install coreutils试试。

我在重建一个老旧的sass/compass项目时遇到了这个问题,这个项目最近被一个同事更新到ruby 2.2.5。本项目使用rvm和bundler。这是我的命令

$ rvm install ruby-2.2.5
$ rvm use ruby-2.2.5
$ gem install bundler
$ bundle install

这导致我遇到了著名的ffi安装错误,这是围绕StackOverflow环境报告的:

An error occurred while installing ffi (1.9.14), and Bundler cannot continue.

大多数解决这个问题的建议是安装Xcode命令行工具。然而,这已经安装在我的环境:

$ xcode-select -p
/Library/Developer/CommandLineTools

其他建议说,安装gcc…所以我试着:

$ brew install gcc46

但这也失败了,因为分割错误…¯\_(ツ)_/¯

因此,我尝试手动安装compass,只是为了看看它是否会给出相同的ffi错误:

$ gem install compass

但令我惊讶的是,我得到了一个完全不同的错误:

make: /usr/local/bin/gmkdir: No such file or directory

所以我搜索了这个问题,并发现这篇古老的博客文章说要安装coreutils:

$ brew install coreutils

在用Homebrew安装coreutils之后,bundler能够完成并成功安装compass和依赖项。

最后。

sudo gem update --system
sudo gem install compass

Gem安装过度

也就是运行时这个错误已经被放置在终端中。

Failed to build gem native extension

请也这样做

xcode-select --install

它也会解决这个问题

对于Mac OS:

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

enter image description here

你必须有gcc, json_pure

我从几个帖子上收集了一些信息

sudo gem uninstall sass
sudo gem uninstall compass
sudo gem update --system
gem install json_pure   (if you have already have continued to next step)
sudo yum install gcc gcc-c++   (if you have already have continued to next step)
sudo gem install sass


sudo gem install compass

嗨,如果** sudo宝石更新-系统**不工作,你在更新中得到一个错误,然后使用

sudo gem update——system 2.7.8

如果你正在使用Ubuntu,你应该尝试安装build-essential

apt install build-essential

我在刚安装ubuntu的时候遇到了安装gems的麻烦,这个解决方案对我很有效。

在Mac OS上你需要安装这个功能!

xcode-select --install

试试这个,然后再试着安装指南针

sudo apt install ruby-full

对于macOS 10.14 Mojave,确保您已经通过xcode-select --install安装了命令行工具,并运行以下命令来安装std头文件。

sudo open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

现在再试一下你的指令。

在Mac上安装Ruby宝石是一个常见的困惑和沮丧的来源。不幸的是,大多数解决方案都是不完整的,过时的,并且提供了糟糕的建议。这里投票最多的答案是使用sudo,你不应该需要这样做,特别是如果你不理解它是做什么的。

为什么你不应该使用sudo来安装宝石学习。

错误“Failed to build gem native extension"是由于苹果命令行工具没有安装。但是,安装它们并不一定会为您提供一个合适的Ruby环境。

在高层次上,Ruby设置有5个步骤,我已经在我的在Mac上安装Ruby宝石的权威指南中详细写过。它解释了为什么你会得到这个错误,比较了各种解决方案,为什么有些比其他的更好,以及为什么你不应该使用sudo

我在这个回答中也写了这些步骤: https://stackoverflow.com/a/54873916/928191 < / p >

首先必须从Ruby 2.6升级到3.0(参见https://rvm.io/):

$ curl -sSL https://get.rvm.io | bash -s stable --ruby
$ source /Usrs/myuser/.rvm/scripts/rvm

然后我必须在本地安装它,否则Mac OSX权限不让我升级它(见错误:当执行gem…(Errno::EPERM)不允许操作):

$ sudo gem install -n /usr/local/bin compass

我不完全确定首先安装rvm是否有必要,但它对升级ruby是有用的。