无法构建gem本机扩展(安装Compass)


275

当我尝试安装最新版本的指南针(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

这里发生了什么?如何正确安装最新的指南针?



请确保您已经在系统上进行了make。
Sorter

Answers:


577

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

apt-get install ruby-dev

33
这可以修复Ubuntu上的错误,但似乎OP正在使用OSX。
mhnagaoka 2014年

1
已在Ubuntu 14.04 LTS上为我修复
2015年

30
在CentOS上使用“ yum install ruby​​-devel”等效。谢谢 !
B2F

6
很高兴在OSx问题的答案中找到我的Ubuntu问题的解决方案。不过,您的回答使我的问题得到了解决,我对此表示赞同。天哪!
e-sushi

3
知道如何使它在Windows上运行吗?我使用安装了Ruby开发工具,choco install ruby2.devkit但仍无法正常工作
-jtate,

124

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

1.设置Ruby环境

  • 确保红宝石已安装且是最新的: ruby -v
  • 更新宝石 sudo gem update --system

2.设置MAC环境

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

xcode-select --install

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

3.安装指南针

sudo gem install compass

3
对我来说,这是正确的答案,它需要Xcode命令行工具
svnm 2014年

2
谢谢,为我工作,您是对的,Xcode命令行工具是关键。
sarcom,2015年

5
这对我有用,还有一个附加功能-您必须实际启动XCODE,以便您可以接受许可协议并完成设置。可能值得标记您的答案。
布鲁福德

通过GUI接受更新(协议条款)也可以。
cassioscabral 2015年

在最近更新到Sierra 10.12.6的MacBook Pro上,我还必须运行“ sudo xcodebuild -license”以接受条款和条件,然后再运行sudo gem安装指南针
...。– jocherra

46

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


1
哇,有时候它很容易^^试图用gem安装指南针,但是有一些依赖不能由gem解决。使用apt-get可以正常工作!谢谢
naitsirch 2015年


30

我为您处理同一问题大约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

做到了。希望它也对您有用!


我最近遇到了同样的问题,但是版本更新了。我要做的是先用aptitude卸载以前安装的ruby版本,然后按照rvm.io/rvm/install上的说明再次安装它。正确构建新的ruby / rvm版本指南针。
adosaiguas 2014年

2
感谢您的帮助,非常有帮助。我将步骤3更改rvm install ruby-2.1.2为1.9.3,不再被更新
timelf123 2014年

24

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


xcode-select --install已经完成了,但这对我来说还解决不了
Ade

14

在Mac OS上,您需要安装此功能!

xcode-select --install

10

嗨,要在Mac上运行它是一个挑战,所以无论如何这是一个解决方案

  1. 安装macports
  2. 安装rvm
  3. 重启终端
  4. 先跑rvm requirements再跑rvm install 2.1
  5. 最后一步 gem install compass --pre

我不确定,但Mavericks上的ruby版本不支持本机扩展等。因此,如果您像我一样用“ 2.1”指向其他ruby版本,则效果很好。


我建议不要使用macports。
nomis 2015年

6

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

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

  • 安装macports
  • 安装rvm(--insecure对于SSL相关问题,使用ruby add 标志保持稳定)$\curl -sSL --insecure https://get.rvm.io | bash -s stable --ruby
  • 重新启动终端/获取您的个人资料
  • 运行rvm requirements --with-gcc=clang您不必更新Ruby,因为您下载了最新的稳定版本
  • 最后一步 gem install compass --pre

5

如果您使用的是Ubuntu,则应尝试安装build-essential

apt install build-essential

我在全新安装的ubuntu上遇到了gems安装方面的麻烦,该解决方案对我有用。


我有同样的问题。还有更多人应该对此表示支持。
Sorter

4

您可能需要安装Apple的命令行工具,默认情况下可能未安装在系统上。我遇到了同样的错误,但是在按照此处的任何说明进行操作之前,我安装了命令行工具(由于不相关的问题),并且再次尝试时,安装了罗盘,但没有发现罗盘。YMMV。


这为我解决了上述问题,因此我可以说这是上述问题的可接受答案。
彼得·J·哈里森

4

为了在优胜美地上安装Compass,您需要设置Ruby环境并安装Xcode命令行工具。但是,最重要的是,更新Xcode之后,请确保启动Xcode应用程序并接受Apple许可条款。它将完成组件的安装。之后,您可以安装Compass:sudo gem安装指南针


3

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

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

现在,再次尝试您的命令。


3

你必须有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 gem update --system **不起作用,您在更新中遇到错误,请使用

sudo gem update --system 2.7.8


sudo yum install -y redhat-rpm-config由于此错误,在安装指南针之前,我还必须运行Fedora 24:gcc: error: /usr/lib/rpm/redhat/redhat-hardened-cc1: No such file or directory
Bryce Guinta '17

sudo gem update --system给我错误:ERROR: While executing gem ... (Errno::EPERM) Operation not permitted @ rb_sysopen - System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/gem:(
阿德

2

在优胜美地上,您所要做的就是安装命令行工具。然后就可以了。

即使其他宝石安装良好。您必须运行xcode-select --install才能使gem安装指南针正常工作。

祝好运。



2

在ubuntu 14.04中,执行apt-get install ruby​​gems时,出现错误

E:软件包“ ruby​​gems”没有安装候选对象

按照命令解决问题。

sudo apt-get install gcc ruby​​-devel ruby​​gems-integration ruby​​-compass


2

尝试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

但这也未能因分段错误... ¯\_(ツ)_/¯

因此,然后我尝试手动安装指南针,只是看它是否会产生相同的ffi错误:

$ gem install compass

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

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

因此,我搜索了这个问题,并找到了这个古老的博客文章,其中说要安装coreutils:

$ brew install coreutils

coreutils使用Homebrew 安装后,捆绑程序能够成功完成并安装指南针和依赖项。

结束。



2

什么时候

gem install过量使用

运行此错误也已放置在终端中。

Failed to build gem native extension

请同样

xcode-select --install

它也会解决这个问题


我懂了xcode-select: error: command line tools are already installed, use "Software Update" to install updates。这不能解决。
阿德(Ade)

2

对于Mac OS:

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

在此处输入图片说明


1

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

sudo apt install ruby-full

0

我在Linux Mint上遇到了同样的问题,但是我可以通过卸载ruby并再次安装来解决它。

卸载ruby:

sudo apt-get remove 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

再次安装红宝石

sudo apt-get install ruby2.2

安装指南针

sudo gem install compass

最后一条命令已成功执行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.