当前位置:  开发笔记 > 编程语言 > 正文

无法构建gem原生扩展(安装Compass)

如何解决《无法构建gem原生扩展(安装Compass)》经验,为你挑选了9个好方法。

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

这里发生了什么?如何安装最新的指南针而不出错?



1> Rutger van B..:

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

apt-get install ruby-dev


`xcode-select --install`适用于OSX
这修复了Ubuntu上的错误,但似乎OP正在使用OSX.
使用"yum install ruby​​-devel"在CentOS上工作,这相当于.谢谢 !
有趣的是在回答OSx问题时找到我的Ubuntu问题的解决方案.尽管如此,你已经得到了我的支持,因为你的答案刚刚解决了我的问题.TNX!
这对我来说很有用.
知道如何让它在Windows上运行吗?我使用`choco install ruby​​2.devkit`安装了Ruby dev工具,但它仍然无法正常工作
谁能解释为什么这种灵魂奏效?

2> 小智..:

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

1.设置Ruby环境

确保安装ruby并保持最新: ruby -v

更新宝石 sudo gem update --system

2.设置MAC环境

- 安装Xcode命令行工具这是安装Compass的关键. ruby -v

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

3.安装指南针

sudo gem update --system


在我的情况下丢失的Xcode命令行工具!谢谢
这对我来说只有一个补充 - 您必须实际启动XCODE,以便您可以接受许可协议并让它完成设置.可能值得标记你的答案.
对我来说,这是正确的答案,它需要Xcode命令行工具
谢谢,为我工作,你是对的,Xcode命令行工具是关键.

3> 小智..:

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



4> vanduc1102..:

你可以尝试使用Debian

sudo apt-get install gcc ruby-dev rubygems compass

对于Fedora,Centos

yum -y install gcc ruby-devel rubygems compass

它对我有用.


我还必须安装`make`.

5> 小智..:

我和你在同一个问题上挣扎了大约3个小时.截至Compass 1.0.alpha19,要求是rvm版本1.9.3.

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

    sudo gem uninstall sass

    sudo gem uninstall compass

    rvm install ruby-1.9.3-p448

    sudo gem install sass --pre

    sudo gem install compass --pre

这样做了.希望它也适合你!


谢谢你,非常有帮助.我将第3步更改为`rvm install ruby​​-2.1.2`,因为1.9.3不再更新

6> BlackHatSamu..:

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


`xcode-select --install`为我工作.

7> user3645907..:

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

xcode-select --install


这不能在macOS Mojave上解决

8> paul.g..:

嗨,让它在Mac上工作是一个挑战,所以无论如何这里是一个解决方案

    安装macports

    安装rvm

    重启终端

    运行rvm requirements然后运行rvm install 2.1

    最后一步来运行 gem install compass --pre

我不确定但是Mavericks上的ruby版本不支持本机扩展等...所以如果你指向其他ruby版本,就像我做"2.1"一样,它工作正常.



9> tbremer..:

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

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

安装macports

安装rvm(与Ruby --insecure相关问题的ruby add 标志稳定)$\curl -sSL --insecure https://get.rvm.io | bash -s stable --ruby

重启终端/资源您的个人资料

运行rvm requirements --with-gcc=clang您不必更新Ruby,因为您下载了最后一个稳定版本

最后一步来运行 gem install compass --pre

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有