当我尝试安装最新版本的指南针(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
这里发生了什么?如何安装最新的指南针而不出错?
答案 0 :(得分:546)
试试这个,然后尝试再次安装指南针
apt-get install ruby-dev
答案 1 :(得分:118)
为了安装指南针在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
答案 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。
有几个未收集的帖子,但对我有用的是:
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
就是这样做的。希望它也适合你!
答案 5 :(得分:24)
为了解决这个问题,我必须确保拥有最新版本的Ruby和宝石gem update --system
;然后,我必须确保Xcode&amp;已安装命令行工具:xcode-select --install
。
答案 6 :(得分:14)
在Mac OS上,您需要安装此功能!
xcode-select --install
答案 7 :(得分:10)
嗨,让它在Mac上运行是一项挑战,所以无论如何这里是一个解决方案
答案 8 :(得分:6)
不确定为什么这些都没有被标记为正确的答案,但我通过谷歌搜索来到这里,所以我会传递我所知道的...
@ paul_g&#39的方法对我来说非常接近,我在Mac OSx10.9 Retina上的步骤:
--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)
答案 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)
答案 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