错误:无法构建 gem 本机扩展 (ruby extconf.rb):Mac OSX
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/23429145/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
ERROR: Failed to build gem native extension (ruby extconf.rb): Mac OSX
提问by David Williams
I am attempting to install a gem, and I get this error, which myself and the gem author have never seen before. How do I fix this?
我正在尝试安装一个 gem,但我收到了这个错误,这是我自己和 gem 作者以前从未见过的。我该如何解决?
Davids-MacBook-Pro:web david$ sudo /usr/bin/gem install compass --pre
Password:
Building native extensions. This could take a while...
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="
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
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/gems/ffi-1.9.3/ext/ffi_c/gem_make.out
回答by Chris
If this is occuring in OSX Mavericks, please ensure the command line tools are installed by running the following.
如果这发生在 OSX Mavericks 中,请确保通过运行以下命令安装了命令行工具。
Older editions of OSX & XCode had the install for Command Line Tools in the XCode IDE itself. In OSX Mavericks I had to run the commands below to fix my command line tools so that I could install rubygems using native extensions.
旧版本的 OSX 和 XCode 在 XCode IDE 本身中安装了命令行工具。在 OSX Mavericks 中,我必须运行以下命令来修复我的命令行工具,以便我可以使用本机扩展安装 rubygems。
$ sudo xcode-select --install
$ xcode-select --print-path
/Library/Developer/CommandLineTools
回答by soheildb
Try this:
尝试这个:
ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future gem install <gemName>
For an explanation see this answer
有关解释,请参阅此答案
回答by James B. Byrne
On OSX-10.9.5 using xcode-select --installdid not work for me. It started and asked to confirm the licence but then reported that it could not find the software.
在 OSX-10.9.5 上使用xcode-select --install对我不起作用。它启动并要求确认许可证,但随后报告找不到该软件。
I ended up visiting: https://developer.apple.com/downloads/index.action#, downloading the appropriate CommandLineTools dmg for OSX-10.9.5, installing the tools manually from the pkg, and then using: xcode-select --switch=/Library/Developer/CommandLineTools, to set the path.
我最终访问了: https://developer.apple.com/downloads/index.action#,下载适用于 OSX-10.9.5 的相应 CommandLineTools dmg,从 pkg 手动安装工具,然后使用:xcode-select --switch=/Library/Developer/CommandLineTools设置路径。
After which everything worked fine.
之后一切正常。
回答by dx7
This is an Apple LLVM error.
这是 Apple LLVM 错误。
For now, you can:
目前,您可以:
export ARCHFLAGS="-Wno-error=unused-command-line-argument-hard-error-in-future"
Though as you can see from the warning name this not a permanent solution.
虽然正如您从警告名称中看到的那样,这不是一个永久的解决方案。
Source: https://langui.sh/2014/03/10/wunused-command-line-argument-hard-error-in-future-is-a-harsh-mistress/
来源:https: //langui.sh/2014/03/10/wunused-command-line-argument-hard-error-in-future-is-a-harsh-mistress/

