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

时间:2014-03-20 20:49:22

标签: ruby macos terminal compass-sass

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

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

23 个答案:

答案 0 :(得分:546)

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

apt-get install ruby-dev

答案 1 :(得分:118)

为了安装指南针在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

答案 2 :(得分:41)

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

答案 3 :(得分:36)

您可以使用

在Debian中试用
sudo apt-get install gcc ruby-dev rubygems compass

for Fedora,Centos

yum -y install gcc ruby-devel rubygems compass

它对我有用。

答案 4 :(得分:29)

我和你在同一个问题上挣扎了大约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
  6. 就是这样做的。希望它也适合你!

答案 5 :(得分:24)

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

答案 6 :(得分:14)

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

xcode-select --install

答案 7 :(得分:10)

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

  1. 安装macports
  2. 安装rvm
  3. 重新启动终端
  4. 运行rvm requirements,然后运行rvm install 2.1
  5. 运行gem install compass --pre
  6. 的最后一步

    我不确定但是Mavericks上的ruby版本不支持原生扩展等...所以如果你指向其他ruby版本就像我做的那样“2.1”它可以正常工作。

答案 8 :(得分:6)

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

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

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

答案 9 :(得分:4)

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

答案 10 :(得分:4)

您可能需要安装Apple的命令行工具,默认情况下可能未安装在您的系统上。我得到了同样的错误,但在遵循这里的任何说明之前,我安装了命令行工具(由于一个无关的问题)并且当我再次尝试时,并且看到罗盘安装没有问题。 YMMV。

答案 11 :(得分: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

答案 12 :(得分:2)

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

  

无法安装该软件,因为它目前无法使用   软件更新服务器。

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

然后,您就可以安装最新版本的命令行工具。

答案 13 :(得分:2)

在yosemite上,您所要做的就是安装命令行工具。那就行了。

即使其他宝石安装得很好。你必须运行xcode-select --install for gem install compass才能工作。

祝你好运。

答案 14 :(得分:2)

尝试brew install coreutils

我在重建最近由同事更新为ruby 2.2.5的老化sass /指南针项目时遇到了这个问题。该项目使用rvm和bundler。这些是我的命令

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

这导致我遇到了在StackOverflow环境中报告的着名的ffi安装错误:

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

所以我搜索了这个问题,发现this ancient blog post说要安装coreutils:

$ brew install coreutils

在使用Homebrew安装coreutils后,bundler能够成功完成并安装指南针和依赖项。

结束。

答案 15 :(得分:2)

  • sudo gem update --system
  • sudo gem install compass

答案 16 :(得分:2)

何时

  

gem install overcommit

也运行此错误已放入终端。

xcode-select --install

请做同样的

DECLARE  @TSQL VARCHAR(8000)
    ,@CUSTOMER_ACCOUNT VARCHAR(20)

SELECT @TSQL1 = '
SELECT * FROM OPENQUERY(MAGINUS,''
SELECT 
 CM.CUSTOMER_ACCOUNT  AS "CustomerAccount"
,CM.CONTACT_NAME      AS "ContactName"
,CM.MEMBERSHIP_NUMBER AS "MembershipNumber"
,P.LONG_DESCRIPTION_1 AS "ProductDescription"
,DATEADD(SECOND, CM.MEMBERSHIP_START_DATE, "19700101")  AS     "MembershipStartDate"
,DATEADD(SECOND, CM.MEMBERSHIP_EXPIRY_DATE, "19700101") AS "MemberhrshipEndDate"
,SH.ORDER_VALUE AS "Price Paid"
FROM MAGINUS.CUSTOMER_MEMBERSHIP CM 
INNER JOIN MAGINUS.PRODUCT  P 
ON CM.PRODUCT_CODE = P.PRODUCT_CODE
INNER JOIN MAGINUS.SALES_HEADER SH
ON CM.CUSTOMER_ACCOUNT = SH.CUSTOMER_ACCOUNT
AND CM.SALES_DOCUMENT_NUM = SH.SALES_DOCUMENT_NUM
WHERE CM.CUSTOMER_ACCOUNT = ''''' + @CUSTOMER_ACCOUNT + ''''''')'
EXEC (@TSQL1)

它也将解决这个问题

答案 17 :(得分:2)

对于Mac OS:

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

enter image description here

答案 18 :(得分:2)

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

apt install build-essential

我在新安装的ubuntu上安装了宝石时遇到了麻烦,这个解决方案对我有用。

答案 19 :(得分:2)

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

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

现在再次尝试您的命令。

答案 20 :(得分:1)

尝试一下,然后尝试再次安装指南针

fun main(args: Array<String>) {
    val notaryName = CordaX500Name("MyNotary", "London", "GB")
    val notarySpec = NotarySpec(name = notaryName, validating = false)

    driver(DriverParameters(notarySpecs = listOf(notarySpec))) {
        // Driver logic.
    }
}

答案 21 :(得分: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

最后一个命令成功执行。

答案 22 :(得分:0)

在Mac上安装Ruby gem是造成混乱和沮丧的常见原因。不幸的是,大多数解决方案是不完整,过时的,并且提供了不好的建议。这里投票得票最多的答案是说使用sudo,这是您永远都不需要做的,特别是如果您不了解它的作用的话。

错误“无法构建gem本机扩展名”是由于未安装Apple命令行工具所致。但是,安装它们并不一定会为您提供适当的Ruby环境。一个有效的Ruby设置有5个步骤,我在definitive guide to installing Ruby gems on a Mac中详细介绍了该步骤。它说明了为什么会出现此错误,比较了各种解决方案,为什么有些解决方案比其他解决方案好,以及为什么不应该使用sudo

TL; DR:使用经过实践检验且可靠的自动化脚本,它将为您完成所有设置:https://github.com/monfresh/laptop